apache-flex - Actionscript 的 ExternalInterface.addCallback 只能在本地工作,不能在生产中使用

标签 apache-flex flash actionscript-3 flex4

在我的 Flex 应用程序中,我需要一个 Javascript 控件来调用我的 Actionscript 方法之一。很简单,根据 Flex/Actionscript 文档,我在我的 Actionscript 代码中写了这个:

if (ExternalInterface.available)
    ExternalInterface.addCallback("setName", setNameInActiveWindow);

在 Javascript 控件中,我写道:
document.getElementById('FlexAppId').setName(name);

效果很好。正如预期的那样,所以我去了生产。但它在生产中不起作用:(。完全相同的代码......我无法弄清楚。运行上面的Javascript代码,但没有在Actionscript代码中执行回调。

这与域安全性有关吗?在本地,我使用 local.mydomain.com:8080,其中 local.mydomain.com 解析为 127.0.0.1(我需要这样做,以便某些小部件正常工作)。 Flex 应用程序来自同一个本地网络服务器。然而,在生产中,它只是 www.mydomain.com(mydomain.com 不是真正的域名),而 Flex 应用程序来自 flash.mydomain.com(一个 CDN)。

我在 www.mydomain.com 上有一个 crossdomain.xml 文件:
<?xml version="1.0"?>
<!DOCTYPE cross-domain-policy SYSTEM "http://www.adobe.com/xml/dtds/cross-domain-policy.dtd">
<cross-domain-policy>
        <site-control permitted-cross-domain-policies="master-only"/>
        <allow-access-from domain="*.mydomain.com"/>
</cross-domain-policy>

更新 :我尝试更改本地环境,以便从 flash.mydomain.com 引用 Flex 应用程序,就像在生产中一样。事实证明,我在本地也遇到了同样的问题......所以尽管我上面有 crossdomain.xml 文件,但这似乎是某种域安全问题。我需要更改 crossdomain.xml 中的某些内容吗?有什么额外的我需要得到ExternalInterface.addCallback上类?

更新 2 : 让它工作!我必须同时做 Security.allowDomain("*")Security.allowInsecureDomain("*") .将它设置为 flash.mydomain.com 并没有解决问题,我不得不放一个通配符。 allowNetworking没有效果。我需要allowScriptAccess="always" ,但我以前有过。使用 ExternalInterface.call 调用 Javascript仅使用该参数即可轻松工作。但是添加一个回调函数 ExternalInterface.addCallback需要上述带有通配符的安全方法。

最佳答案

SWF 和 DOM 之间的通信不由跨域文件处理。
Flash 内容和导航器之间的这种交互由 的值处理。 allowScriptAccess 允许网络 包装您的 SWF 的 html 中的标签。

因为您的 SWF 和 HTML 不是来自同一个限定域,所以您必须设置 allowScriptAccess 值到 总是 .
但要小心,因为这意味着如果您在 SWF 中加载不受信任的内容,它也将可以访问 DOM 页面并可能执行恶意操作。

欲了解更多信息,请查看:

http://tv.adobe.com/watch/how-to-develop-secure-flash-platform-apps/scripting-and-allowscriptaccess/
http://kb2.adobe.com/cps/407/kb407748.html
http://blogs.adobe.com/stateofsecurity/2007/07/how_to_restrict_swf_content_fr_1.html

关于apache-flex - Actionscript 的 ExternalInterface.addCallback 只能在本地工作,不能在生产中使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4698506/

相关文章:

windows - 如何使 2021 年 1 月 12 日之后的 flash 可执行文件工作?

jquery - 使用 jQuery 淡入/淡出与 zClip (Flash)

actionscript-3 - 记录调度自定义事件(在 ActionScript 3 中)

PHP套接字值得吗?

javascript - 在浏览器中手动缓存 SWF/SWC - 模仿 Adob​​e 的签名 SWZ?

java - 从Java读取数据并在Flex中显示

jquery - 如何从HTML页面正确删除Flash对象

java - MXMLC Ant 任务导致 java.lang.OutOFMemoryError

php - As3 & PHP URLEncoding问题!

iphone - Flash中IOS开发中的default.png图片