javascript - ExternalInterface addCallback 多次失败

标签 javascript jquery wordpress actionscript-2 externalinterface

我正在尝试让 JS 在 Wordpress 网页和 Actionscript 2 Flash 电影中相互交谈。这一尝试惨遭失败。每次尝试调用我设置回调的函数时,我都会在浏览器错误控制台中收到“.....不是函数”(我使用的是 Firefox 20)。

设置方式如下:

该页面有点不寻常,是一个带有内联 JavaScript 的 Wordpress 页面。主要的 javascript 是一个 jQuery.ready() 代码块,用于加载 flash 对象(这样做是为了将 URL 中的 GET 参数传递到 flash)。加载后,会出现一个链接:

<a href="javascript:jQuery('#fmap')[0].setRegion('regiona');">Region A</a>

同时,Flash 对象中包含以下内容以使其成为可能:

import flash.external.ExternalInterface;
System.security.allowDomain("thisdomain.com");   // the domain on which the flash is hosted
ExternalInterface.addCallback("setRegion", null, switchZone);  //switchZone is the function's internal name

Flash 的容器已将allowScriptAccess 设置为“始终”,并且我可以确认 jQuery 语句达到了正确的目标。然而,当调试 flash 对象时,addCallback 返回 false — 这表明它失败了。有人知道会发生什么吗?

最佳答案

我以前也遇到过这样的问题。为了解释这一点,您可以将您的 Flash 文件想象为一个图像。通常,页面中的图像将在整个页面加载后显示。对于你的flash文件来说,在$.ready事件中,flash DOM被插入到你的页面中,但是它的内容正在加载,它的环境还没有准备好。

要处理此问题,您需要在页面中注册回调函数,如下所示:

window.ping = function () {
    $('#fmap')[0].setRegion('regiona');
}

然后在您的 Flash 环境中,调用已注册的 ping()

函数调用的顺序是这里的关键点。

关于javascript - ExternalInterface addCallback 多次失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16600020/

相关文章:

javascript - 如何部署React js单页应用程序(SPA)

javascript - 如果元素高度大于 x addClass "portrait"否则 addClass "landscape"

javascript - 如何使字体大小与屏幕分辨率和显示器大小无关?

jquery - 使用 CSS 和 JQuery 绘制垂直线

javascript - 如果选中单选按钮,如何按值隐藏元素?

jquery - 锁定多个 jquery FLOT 图表的十字线

php - wordpress 导出 csv 在管理菜单页面中不起作用

linux - 无法启动 Apache Web 服务器

javascript - 使用下拉菜单显示 2 个不同的数据表

javascript foreach 数组并用逗号和空格分隔并显示为字符串