1

公司最近升级到 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/>”部分,我可以看到eObject Expected

我试过的:

  • 没有 SWFObject 的静态实现。这行得通。但随后 Firefox 无法正确处理 XML(这似乎与 IE 相同)
  • 升级到 SWFObject 2.2。使用动态实现它仍然失败。使用静态实现它适用于 IE 但不适用于 Firefox

这不是我的 Flash 电影,来源是……嗯,我不知道。写这篇文章的人已经离开了公司。也就是说,这似乎是一个疯狂的问题。

我提出的解决方法只是对 Firefox 使用 SWFObject 并为 IE 使用静态实现,但我真的很想知道哪里出了问题。

4

1 回答 1

0

这是由 Flash Player 11.8.800.168 中的错误引起的。它已在 11.8.800.175 中修复。

Bug修复:

3630443 - [External][Windows][IE] ExternalInterface.call() method with non-ASCII text as a parameter corrupts the characters on the Javascript side
于 2013-10-03T15:15:52.233 回答