这里有一个挑战:我有一个Flash电影,它将嵌入在一个使用未知DOM ID的页面中,我想在JS函数中能够识别/存储回调.
我的理想用户流程是:
> Flash中的用户点击按钮.
> Flash会暂停任何动画/视频/声音等
Flash会调用一个注入的JS函数来显示页面覆盖的覆盖体验.
>当用户关闭重叠体验时,调用Flash对象上的回调方法.
> Flash恢复播放.
问题是,当AS3使用ExternalInterface.call(“functionName”,args …)方法时,似乎没有触发DOM事件,因此不可能知道哪个对象称为JS函数,所以具有“registerMe()”功能似乎不起作用.基本上,注入的JS函数无法确定要调用哪个DOM对象,因为Flash对象的ID是未知的.
[UPDATE]
事实证明,SWF可以使用loaderInfo.url来确定自己的url.我将该信息传递给启动重叠体验的脚本,以便将其存储以便将来与所有应用程序/ x-shockwave-flash DOM对象进行比较.当找到匹配项时,就是调用SWF.有没有人看到这个逻辑的缺陷? (我不像我那样熟练地使用JS)
解决方法
您正在调用的
JavaScript函数被手动调用,而不是作为事件.就像在JS中使用调用或应用方法一样.
您可以做的是将DOM name/ID of the active flash video作为参数传递给您调用的函数,以便知道要引用哪个DOM元素:
ExternalInterface.call( 'functionName',arg1,arg2,...,ExternalInterface.objectID );@H_403_22@使用此方法的一个“getcha”是您需要确保对象和/或嵌入元素同时设置其[id]和[name]属性,因为ExternalInterface.objectID将被不同的浏览器注册.
如果我记得正确的话,IE读取[name]和ff / chrome / opera / safari读取[id],尽管我相信一些浏览器会成功地回退到[name].我需要做一个测试来证实这一点.
无论如何,给出an identical
name
andid
,它应该正常工作(你可以根据ID选择DOM中的元素).