公司最近升级到 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>');
}
正如我所说,这一切在 Firefox 和新的 Flash 版本中仍然有效。
当我使用 IE 调试器单步执行上述函数时,我得到以下步骤:
function anonymous() {
return eval(this.CallFunction("<invoke name=\"renderUsingXml\" returntype=\"javascript\">" + __flash__argumentsToXML(arguments, 0) + "</invoke>"));
}
此时,我检查了参数变量,它包含了我们所期望的 XML。下一步进入后,我得到这个:
try { __flash__toXML(calledFromFlash(undefined)); } catch (e) { "<undefined/>"; }
此时,调试器已经开始捕获,但又一步将代码放入“
我尝试过的:
- 没有 SWFObject 的静态实现。这有效。但是 Firefox 无法正确处理 XML(这似乎是与 IE 相同的问题)
- 升级到 SWFObject 2.2。使用动态实现它仍然失败。使用静态实现,它可以在 IE 中运行,但不能在 Firefox 中运行
这不是我的 Flash 电影,来源是......好吧,我不知道。写这篇文章的人已经离开公司了。也就是说,这似乎是一个疯狂的问题。
我建议的修复方法只是对 Firefox 使用 SWFObject,对 IE 使用静态实现,但我真的想知道出了什么问题。
最佳答案
这是由 Flash Player 11.8.800.168 中的错误引起的。它已在 11.8.800.175 中修复。
错误修复:
3630443 - [External][Windows][IE] ExternalInterface.call() method with non-ASCII text as a parameter corrupts the characters on the Javascript side
关于javascript - Flash v11.8.800.168 函数调用在 Internet Explorer 中失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19056018/