爱你不容易——ExternalInterface


ExternalInterface是什么?

     ExternalInterface 类是Flash Player 8 以后提供的一个外部 API,在功能上与 fscommand()、CallFrame() 和 CallLabel() 方法相似,用来进行Javascript和Actionscript之间的通讯,这是官方推荐使用的类,相比前述三个方法,它更灵活、更通用。

通过这个类,as可以调用 HTML 页的js,同时传递任何数据类型的任意数量的参数,并可以接收调用的返回值;反过来,HTML 页上的 js,也可以调用 Flash 中的 as 函数。as 函数可以返回一个值,js会立即接收它作为该调用的返回值。详细使用方法在Flash的帮助中有详细讲述。

使用ExternalInterface时的"flash_id"未定义错误

     但是在使用这个类时,会出现问题,你满心欢喜而去,郁闷而归,虽然问题解决了,但是心有余悸,就象吃瓜子把皮卡喉咙一样,要想使用ExternalInterface不报"flash_id"未定义(flash_id即htm中插入swf文件的Object的id),有下边三个方法:

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

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

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

ExpandedBlockStart.gif ContractedBlock.gif < script  type ="text/javascript" > dot.gif  
InBlock.gif
function ExternalInterfaceManager() 
ExpandedSubBlockStart.gifContractedSubBlock.gif
dot.gif
ExpandedSubBlockStart.gifContractedSubBlock.gif      
this.registerMovie = function(movieName) dot.gif
InBlock.gif          
if(!window.fakeMovies) window.fakeMovies = new Array(); 
InBlock.gif          window.fakeMovies[window.fakeMovies.length] 
= movieName; 
ExpandedSubBlockEnd.gif      }
 
ExpandedSubBlockStart.gifContractedSubBlock.gif      
this.initialize = function() dot.gif
InBlock.gif          
if(document.all) 
ExpandedSubBlockStart.gifContractedSubBlock.gif          
dot.gif
InBlock.gif              
if(window.fakeMovies) 
ExpandedSubBlockStart.gifContractedSubBlock.gif              
dot.gif
InBlock.gif                  
for(i=0;i<window.fakeMovies.length;i++
ExpandedSubBlockStart.gifContractedSubBlock.gif                  
dot.gif
InBlock.gif                      window[window.fakeMovies[i]] 
= new Object(); 
ExpandedSubBlockEnd.gif                  }
 
InBlock.gif                  window.onload 
= initializeExternalInterface; 
ExpandedSubBlockEnd.gif              }
 
ExpandedSubBlockEnd.gif          }
 
InBlock.gif  
ExpandedSubBlockEnd.gif      }
 
ExpandedSubBlockEnd.gif}
 
ExpandedSubBlockStart.gifContractedSubBlock.gif
function initializeExternalInterface() dot.gif
ExpandedSubBlockStart.gifContractedSubBlock.gif      
for(i=0;i<window.fakeMovies.length;i++dot.gif
InBlock.gif          
var movieName = window.fakeMovies[i]; 
InBlock.gif          
var fakeMovie = window[movieName]; 
InBlock.gif          
var realMovie = document.getElementById(movieName); 
InBlock.gif  
ExpandedSubBlockStart.gifContractedSubBlock.gif          
for(var method in fakeMovie) dot.gif{             
ExpandedSubBlockStart.gifContractedSubBlock.gif              realMovie[method] 
= function() dot.gif{flashFunction = "<invoke name=\"" + method.toString() + "\" returntype=\"javascript\">" + __flash__argumentsToXML(arguments, 0+ "</invoke>";this.CallFunction(flashFunction);} 
ExpandedSubBlockEnd.gif          }
 
InBlock.gif  
InBlock.gif          window[movieName] 
= realMovie; 
ExpandedSubBlockEnd.gif      }
 
ExpandedSubBlockEnd.gif}
 
InBlock.gif
var eim = new ExternalInterfaceManager(); 
InBlock.gifeim.registerMovie(
"flash_id"); 
ExpandedBlockEnd.gifeim.initialize(); 
None.gif
</ script >  
None.gif

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

3、还有一个方法,就是将flash放在form标记之外;

这个问题在官方livedocs有人反馈,但不知Flash 9中是否解决。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值