posts - 22, comments - 17, trackbacks - 0, articles - 0
  IT博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

解决Form中ExternalInterface的Bug问题

Posted on 2007-09-10 16:13 flashlizi 阅读(1440) 评论(1)  编辑 收藏 引用 所属分类: AS2
ExternalInterface API是专门处理flash与外部应用的交互的。在IE浏览器下,将flash对象放在form标签之间的时候,js就会报错,ExternalInterface的call和addcallback方法失效。网上有两种解决办法,经测试均有效。

1、加一个<form></form>在你嵌套flash的form里的<form>标记后面:

<form><form></form>
//这里是你的flash代码内容。
</form>

这样代码并不好看,算是一个小hack吧。

2、添加如下JS在你的flash之前:

<script type="text/javascript"> 
function ExternalInterfaceManager() 

    
this.registerMovie = function(movieName) 
        
if(!window.fakeMovies) window.fakeMovies = new Array(); 
        window.fakeMovies[window.fakeMovies.length] 
= movieName; 
    }
 
    
this.initialize = function() 
        
if(document.all) 
        

            
if(window.fakeMovies) 
            

                
for(i=0;i<window.fakeMovies.length;i++
                

                    window[window.fakeMovies[i]] 
= new Object(); 
                }
 
                window.onload 
= initializeExternalInterface; 
            }
 
        }
 
  
    }
 
}
 
function initializeExternalInterface() 
    
for(i=0;i<window.fakeMovies.length;i++
        
var movieName = window.fakeMovies[i]; 
        
var fakeMovie = window[movieName]; 
        
var realMovie = document.getElementById(movieName); 
  
        
for(var method in fakeMovie) {             
            realMovie[method] 
= function() {flashFunction = "<invoke name=\"" + method.toString() + "\" returntype=\"javascript\">" + __flash__argumentsToXML(arguments, 0+ "</invoke>";this.CallFunction(flashFunction);} 
        }
 
  
        window[movieName] 
= realMovie; 
    }
 
}
 
var eim = new ExternalInterfaceManager(); 
eim.registerMovie(
"flash_id"); 
eim.initialize(); 
</script>

注意:其中eim.registerMovie("flash_id"); 中的flash_id为你的swf的ID。

Feedback

# re: 解决Form中ExternalInterface的Bug问题  回复  更多评论   

2007-11-15 17:44 by pan
感谢你的提醒.这也有一个不错的方法
http://kb.adobe.com/selfservice/viewContent.do?externalId=kb400730&sliceId=2
只有注册用户登录后才能发表评论。