JavaScript函数可以检测哪个Flash DOM对象调用它吗?

Jos*_*van 10 javascript dom callback actionscript-3

这是挑战:我有一个Flash电影,它将使用未知的DOM ID嵌入到页面中,我希望能够在JS函数中识别/存储回调.

我理想的用户流程是:

  1. 用户单击Flash中的按钮.
  2. Flash会暂停所有动画/视频/声音等.
  3. Flash调用注入的JS函数来显示覆盖页面的叠加体验.
  4. 当用户关闭叠加体验时,将调用Flash对象上的回调方法.
  5. Flash恢复播放.

问题是,当AS3使用ExternalInterface.call("functionName",args ...)方法时,似乎没有触发DOM事件,因此无法分辨哪个对象称为JS函数,所以拥有"registerMe()"功能似乎不起作用.基本上,注入的JS函数无法确定要调用哪个DOM对象,因为Flash对象的ID未知.

[更新] 事实证明,SWF可以使用loaderInfo.url确定自己的URL.我将这些信息传递给启动叠加体验的脚本,以便将其存储起来,以便将来与所有application/x-shockwave-flash DOM对象进行比较.找到匹配项时,即调用SWF.有没有人看到这个逻辑的缺陷?(我对JS的熟练程度不如我和AS一样)

zzz*_*Bov 5

您正在调用的JavaScript函数是手动调用的,而不是事件.就像你在JS中使用了call或者apply方法一样.

可以做的是将活动Flash视频DOM名称/ ID作为参数传递给您正在调用的函数,以便它知道要引用的DOM元素:

ExternalInterface.call( 'functionName', arg1, arg2, ..., ExternalInterface.objectID );
Run Code Online (Sandbox Code Playgroud)

使用此方法的一个"问题"是您需要确保object和/或embed元素都设置了它们[id][name]属性,因为ExternalInterface.objectID将在浏览器中不一致地注册.

如果我没记错的话,IE会读取[name]和ff/chrome/opera/safari读取[id],虽然我相信一些浏览器会成功回退到[name].我需要做一个测试来证实这一点.

在任何情况下,给出一个相同的name,id它应该工作正常(你将能够只根据ID选择DOM中的元素).