公司最近升级到 Flash v11.8.800.168,使用 SWFObject (1.1) 加载的 Flash 电影在 Internet Explorer 中无法正常工作(Firefox 工作正常)。影片使用 jquery document.ready 方法动态加载,该方法使用“new SWFObject(...); so.write("ID")”方法(同样是 SWFObject 1.1)。\
加载的电影调用 JavaScript 函数(使用服务器脚本动态构建)。经调试器检查,该函数被正确调用。JavaScript 函数调用 Flash 电影中的一个方法,向其传递一些 XML(用于呈现一些用户和导航项)。
像这样的东西:
function calledFromFlash() {
document.getElementById("FlashMovie").renderUsingXml('<?xml version 1.0"?><lotsofxml></lotsofxml>');
}
就像我说的,这一切仍然在新的 Flash 版本的 Firefox 中有效。
当我单步执行上述功能时,在 IE 调试器中使用 step into,我得到以下步骤:
function anonymous() {
return eval(this.CallFunction("<invoke name=\"renderUsingXml\" returntype=\"javascript\">" + __flash__argumentsToXML(arguments, 0) + "</invoke>"));
}
此时,我检查了 arguments 变量,它包含预期的 XML。在下一步进入之后,我得到了这个:
try { __flash__toXML(calledFromFlash(undefined)); } catch (e) { "<undefined/>"; }
在这一点上,调试器已经开始了,还有一步将代码放入“<undefined/>”部分,我可以看到e是Object Expected
我试过的:
- 没有 SWFObject 的静态实现。这行得通。但随后 Firefox 无法正确处理 XML(这似乎与 IE 相同)
- 升级到 SWFObject 2.2。使用动态实现它仍然失败。使用静态实现它适用于 IE 但不适用于 Firefox
这不是我的 Flash 电影,来源是……嗯,我不知道。写这篇文章的人已经离开了公司。也就是说,这似乎是一个疯狂的问题。
我提出的解决方法只是对 Firefox 使用 SWFObject 并为 IE 使用静态实现,但我真的很想知道哪里出了问题。