Browse > Home > Flash8/AS2 > 解决Form中ExternalInterface的Bug问题

| Subcribe via RSS

解决Form中ExternalInterface的Bug问题

一月 20th, 2007 | 235 views | Posted by flashlizi in Flash8/AS2

ExternalInterface API是专门处理flash与外部应用的交互的。在IE浏览器下,将flash对象放在form标签之间的时候,js就会报错,ExternalInterface的call和addcallback方法失效。网上有2种解决办法,经测试均有效。

1、加一个

在你嵌套flash的form里的

标记后面:
[code]<form><form></form>
//这里是你的flash代码内容。
</form>[/code]
这算是一个小hack吧。

2、添加如下JS在你的flash之前:
[code]<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 = " + method.toString() + "\" returntype=\"javascript\">" + __flash__argumentsToXML(arguments, 0) + "";this.CallFunction(flashFunction);}
}

window[movieName] = realMovie;
}
}
var eim = new ExternalInterfaceManager();
eim.registerMovie("flash_id");
eim.initialize();
</script>[/code]
其中eim.registerMovie("flash_id"); 中的flash_id为你的swf的ID。

Leave a Reply