为什么在IE9中,从Flash调用Javascript失败?

5

我在我的Flash应用程序中有一对按钮,它们调用两个不同的JavaScript函数。除了IE9(我没有尝试早期版本的IE),它们在所有浏览器中都可以正常工作。调用函数的代码类似于:

ExternalInterface.call(
        "myLovelyFunction",
        string1, string2);

JS代码如下:

function myLovelyFunction(string1, string2) {
    window.open('https://twitter.com/share?url=http%3A%2F%2Fwww.mysite.com%2Fapage.php&via=atwitteraccount&text=Some%20text%22&related=atwitteraccount',
    'windowname',
    'height=290,width=510');
}

在IE9中,这个函数根本不起作用,但控制台会报错如下:
SCRIPT438: Object doesn't support property or method 'SetReturnValue' 
index.php, line 1 character 1

第1行第1个字符显然没有特定的指向。

通过切换兼容性视图,我可以使其正常工作,虽然控制台错误不会消失。

IE9有什么问题导致这种情况,更重要的是,我该如何解决这个问题?


2
看到你的实际代码而不是“类似这样”的东西会非常有帮助。甚至可能提供一个测试网站的链接? - Kevin Anthony Oppegaard Rose
已添加完整的JS函数主体,尽管函数的主体似乎并不重要。 - izb
你的页面中是否有类似于 Foobar.SetReturnValue() 这样的代码和一个 ID 为 Foobar 的 HTML 元素? - HoLyVieR
不是的,但如果引用了来自谷歌CDN的jQuery 1.6.2,那可能是一个线索。 - izb
如果你的myLovelyFunction不需要任何参数,它会运行吗? - felipemaia
2个回答

6

我也遇到了同样的问题。我使用了以下代码:

    <object type="application/x-shockwave-flash" data="/files/banners/64/64_300x250.swf" width="300" height="250">
      <param name="movie" value="/files/banners/64/64_300x250.swf"/>
      <param name="wmode" value="transparent"/>
    </object>

我只是使用普通的object标签嵌入flash(没有使用SWFObject和embed备用方案)。我的flash文件通过ExternalInterface调用JS函数window.open,代码如下:

ExternalInterface.call("window.open", url, target, features);

无效的尝试: 上面的链接建议将其更改为“document.open”,但这并没有起作用。同时,尝试强制页面在IE-8模式下呈现也没有成功。例如:

<meta http-equiv="X-UA-Compatible" content="IE=8" />

有效方法: 只需向对象标签添加“name”和“id”即可解决问题。例如:

<object type="application/x-shockwave-flash" data="/files/banners/64/64_300x250.swf" width="300" height="250" name="flash_object" id="flash_object">

这个答案让我省了好几个小时去处理Internet Explorer 11的问题。我只用了5分钟就解决了问题,非常感谢! - Avatar

1

1
对我有帮助。显然 ExternalInterface.call 可以通过 id 或 name 引用其嵌入元素,并在找到多个元素时失败。 - commonpike

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接