Flash v11.8.800.168 函数调用在 Internet Explorer 中失败



公司最近升级到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调试器单步执行上述函数时,我得到以下步骤:

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/>"; }

此时,调试器已经在catch上,但又一步将代码带入"><未定义 />"部分,我可以看到e预期的对象

我尝试过:

  • 没有 SWFOject 的静态实现。这行得通。但是Firefox没有正确处理XML(这似乎是与IE相同的问题(
  • 升级到 SWFObject 2.2。 使用动态实现,它仍然失败。 使用静态实现,它可以在IE中工作,但不能在Firefox中工作

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

我建议的解决方法只是将SWFObject用于Firefox并使用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

最新更新