因为 html/容器参数...securityerror: error #2146: 安全沙箱冲突:...
时间:2010-08-11 来源:natian306
因为项目是作为一个独立的flex嵌入到别人的html中,近日需求提出要弹出另一个页面的要求,程序中加入navigateToURL代码后,以为万事大吉,结果不然。报SecurityError: Error #2146: 安全沙箱冲突:http://xxx/xxx.swf 不能调用 navigateToURL,因为 HTML/容器参数 allowNetworking 具有值 internal错,google了一把,原来adobe在安全这块,对一些网络API做了限制。对于参数allowNetworking,adobe有三个参数值可以设置,见下方:
参数:
- "all"(默认值)― SWF 文件中允许使用所有网络 API。
- "internal"― SWF 文件可能不调用浏览器导航或浏览器交互 API,但是它会调用任何其它网络 API。
- "none"― SWF 文件可能不调用浏览器导航或浏览器交互 API,并且它无法使用任何 SWF 到 SWF 通信 API。
可以控制 SWF 文件对网络功能的访问。调用被禁止的 API 会引发 SecurityError 异常。
当 allowNetworking 设置为 "internal" 时,以下 API 被禁止:
- navigateToURL()
- fscommand()
- ExternalInterface.call()
当 allowNetworking 设置为 "none" 时,除了上面列出的那些 API 外,还会禁止以下 API:
- sendToURL()
- FileReference.download()
- FileReference.upload()
- Loader.load()
- LocalConnection.connect()
- LocalConnection.send()
- NetConnection.connect()
- NetStream.play()
- Security.loadPolicyFile()
- SharedObject.getLocal()
- SharedObject.getRemote()
- Socket.connect()
请注意这里的all是默认值,按道理不需要我们手动设置,但为何我的还是报错呢!到此真的很费解,于是我手动更改设置,在index.template.html中的AC_FL_RunContent中加入"allowNetworking","all",在下方的object中加入类似参数,见下图:
到此为止设置完毕,以为大功告捷,莫急,我的问题到此还未解决!我实在费解,我手动都设了,还想要我干嘛?难道玩我还不够吗?
很明显我接下来束手无策了,于是尝试着先看看这个页面的html源码吧,右键---->源文件,我真的很无语,原来在别人在引用我swf的时候在html中将allowNetworking设为了internal,咳,绕了大半圈原来发现问题就在原处。
······
也好,这至少告诉了我们adobe对这块做了这种处理,以后得注意下!