Error #2044: Unhandled SecurityErrorEvent:. text=Error #2048: Security sandbox violation: http://kipos.bluecodestudio.com/holdthebomb/HoldTheBombWeb.swf cannot load data from http://23.29.126.76:8000/socket.io/1/?t=1356891827452.
at io::Socket/doHandshake()[/Users/airrider3/github/AS3-Socket.IO-XHR-Polling/xhr-polling/src/io/Socket.as:139]
at io::Socket/connect()[/Users/airrider3/github/AS3-Socket.IO-XHR-Polling/xhr-polling/src/io/Socket.as:110]
at io::Socket()[/Users/airrider3/github/AS3-Socket.IO-XHR-Polling/xhr-polling/src/io/Socket.as:90]
at io::IO$/connect()[/Users/airrider3/github/AS3-Socket.IO-XHR-Polling/xhr-polling/src/io/IO.as:36]
at MainController/endOfbluecodeSplash()[/Users/airrider3/Dropbox/Projects/Kipos/Minigames/HoldTheBombWeb/src/MainController.as:41]
at bluecodeSplash/endOfSplash()[/Users/airrider3/Dropbox/Projects/Kipos/Minigames/HoldTheBombWeb/src/bluecodeSplash.as:55]
at Function/http://adobe.com/AS3/2006/builtin::apply()
at com.greensock.core::TweenCore/complete()[D:\_Flash\_AS3\src\com\greensock\core\TweenCore.as:178]
at com.greensock::TweenLite/renderTime()[D:\_Flash\_AS3\src\com\greensock\TweenLite.as:477]
at com.greensock.core::SimpleTimeline/renderTime()[D:\_Flash\_AS3\src\com\greensock\core\SimpleTimeline.as:93]
at com.greensock::TweenLite$/updateAll()[D:\_Flash\_AS3\src\com\greensock\TweenLite.as:642]
我正在使用 Flash Builder,这是一个 ActionScript 项目,它使用 Socket.IO 模块连接到运行 NodeJS 的服务器。
要将 Socket.IO 与 AS3 连接,我使用以下库 https://github.com/sbquinlan/AS3-Socket.IO-XHR-Polling 从 Flash Builder 进行本地测试时效果非常好。
但是,如果托管在我的域上 [http://kipos.bluecodestudio.com/holdthebomb/] ,我想它会引发此 SecurityErrorEvent 因为我没有正确使用任何 crossdomain.xml 文件?老实说,我从来没有理解过这个话题,所以我不确定这是否是错误。
无论如何,我有以下 crossdomain.xml 文件:
<?xml version="1.0"?>
<!DOCTYPE cross-domain-policy SYSTEM "/xml/dtds/cross-domain-policy.dtd">
<cross-domain-policy>
<site-control permitted-cross-domain-policies="master-only"/>
<allow-access-from domain="*" to-ports="*"/>
</cross-domain-policy>
我的服务器上有不同的地方。 (应该在托管客户端上吗?)。是的,游戏托管在 bluecodestudio.com 上,而游戏的服务器位于 IP 23.29.126.76 上,在端口 8000 上运行。
如果是跨域策略错误的情况,有人可以解释一下应该采取什么措施来解决该问题吗?
感谢您的关注。
更新1:
我设置了一个服务器,监听端口 843,提供跨域文件,但我可以看到 Flash 没有尝试加载它。 (我测试了命令 python -c 'print "<policy-file-request/>%c" % 0' | nc 23.29.126.76 843
并检查了策略服务器的工作原理。
SWF 为什么不尝试加载跨域策略文件?
最佳答案
跨域策略文件应托管在运行服务器的计算机上,即 23.29.126.76 上。对于套接字连接,flash 播放器会自动尝试从端口 843 加载主跨域策略文件(您可以从 adobe.com http://www.adobe.com/cn/devnet/flashplayer/articles/socket_policy_files.html 获取简单的策略服务器脚本)
更新:
使用Security.loadPolicyFile("xmlsocket://23.29.126.76:843");
直接加载策略文件,但正如我编写的 Flash Player 已经自动执行相同操作(对于端口 843),它发送字符串请求 "<policy-file-request/>\0"
。
调试策略
要调试策略服务器,请执行以下操作:
确保您有 debug flash player .
通过命令(Linux、Mac 或 Windows 上的 cygwin)检查服务器安装是否正确:
echo -ne '<policy-file-request/>\0' | nc -v host port
。此命令应打印出您的 crossdomain.xml 文件通过设置标志
PolicyFileLog=1
打开 Flash 播放器策略日志在 mm.cfg文件(请确保您有flash播放器的debug version),运行swf文件并读取策略日志,它具有用户友好的格式,您将能够通过该日志找出大多数情况下的问题。
关于actionscript-3 - 如何使用 Flash、Socket.IO 和 NodeJS 修复此(可能)跨域策略错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14093429/