SecurityError: Error #2146: 安全沙箱冲突:http://xxx/xxx.swf 不能调用 navigateToURL,因为 HTML/容器参数 allowNetworking 具有值 internal
2010-08-12 15:58
204 查看
因为项目是作为一个独立的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对这块做了这种处理,以后得注意下!
扩展阅读
AllowScriptAccess
参数:
sameDomain:仅当 SWF 文件和网页位于同一域中时才允许执行外出脚本访问。这是 AVM2 内容的默认值。
never:外出脚本访问将始终失败。
always:外出脚本访问将始终成功。
AllowScriptAccess 参数可以防止从一个域中承载的 SWF 文件访问来自另一个域的 HTML 页面中的脚本。
对从另一个域承载的所有 SWF 文件使用 AllowScriptAccess="never" 可以确保位于 HTML 页面中的脚本的安全性。
allowFullScreen
参数:
启用全屏模式设置为"true",否则设置为"false"(默认值)
仅当在响应鼠标事件或键盘事件时才会调用启动全屏模式的 ActionScript。如果在其它情况中调用,Flash Player 会引发异常。
在全屏模式下,用户无法在文本输入字段中输入文本。所有键盘输入和键盘相关的 ActionScript 在全屏模式下均会被禁用,但将应用程序返回标准模式的键盘快捷键(例如按 Esc)除外。
当内容进入全屏模式时,程序会显示一条消息,指导用户如何退出和返回标准模式。该消息将显示几秒钟,然后淡出。
如果某个调用方与 Stage 所有者(主 SWF 文件)没有位于同一安全沙箱,则调用 Stage 对象的 displayState 属性会引发异常。
管理员可以通过在 mms.cfg 文件中设置 FullScreenDisable = 1 对浏览器中运行的 SWF 文件禁用全屏模式。
在浏览器中,必须在 HTML 页面中包含 SWF 文件,才能进入全屏模式。
在独立的播放器或放映文件中始终允许全屏模式。
参数:
"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对这块做了这种处理,以后得注意下!
扩展阅读
AllowScriptAccess
参数:
sameDomain:仅当 SWF 文件和网页位于同一域中时才允许执行外出脚本访问。这是 AVM2 内容的默认值。
never:外出脚本访问将始终失败。
always:外出脚本访问将始终成功。
AllowScriptAccess 参数可以防止从一个域中承载的 SWF 文件访问来自另一个域的 HTML 页面中的脚本。
对从另一个域承载的所有 SWF 文件使用 AllowScriptAccess="never" 可以确保位于 HTML 页面中的脚本的安全性。
allowFullScreen
参数:
启用全屏模式设置为"true",否则设置为"false"(默认值)
仅当在响应鼠标事件或键盘事件时才会调用启动全屏模式的 ActionScript。如果在其它情况中调用,Flash Player 会引发异常。
在全屏模式下,用户无法在文本输入字段中输入文本。所有键盘输入和键盘相关的 ActionScript 在全屏模式下均会被禁用,但将应用程序返回标准模式的键盘快捷键(例如按 Esc)除外。
当内容进入全屏模式时,程序会显示一条消息,指导用户如何退出和返回标准模式。该消息将显示几秒钟,然后淡出。
如果某个调用方与 Stage 所有者(主 SWF 文件)没有位于同一安全沙箱,则调用 Stage 对象的 displayState 属性会引发异常。
管理员可以通过在 mms.cfg 文件中设置 FullScreenDisable = 1 对浏览器中运行的 SWF 文件禁用全屏模式。
在浏览器中,必须在 HTML 页面中包含 SWF 文件,才能进入全屏模式。
在独立的播放器或放映文件中始终允许全屏模式。
相关文章推荐
- 安全沙箱冲突:Loader.content:XX 不能访问 XX 可以通过调用 Security.allowDomain 来避免此冲突。
- flexSecurityError: Error #2123: 安全沙箱冲突
- SecurityError:Error #2048:安全沙箱冲突
- SecurityError:Error #2048:安全沙箱冲突
- “SecurityError: Error #2060: 安全沙箱冲突:ExternalInterface 调用者xxx不能访问xxx
- 关于swf安全沙箱冲突:不能被本地访问
- “SecurityError: Error #2060: 安全沙箱冲突:ExternalInterface 调用者xxx不能访问xxx”解决方案一例
- Flex SecurityError: Error #2060: 安全沙箱冲突:ExternalInterface 调用者 跨域
- Error #2044: 未处理的 securityError:。 text=Error #2048: 安全沙箱冲突: .swf 不能从 192.168.0.98:21 加载数据
- “SecurityError: Error #2060: 安全沙箱冲突:ExternalInterface 调用者xxx...
- 出现security ioError 安全沙箱问题
- 前段html通过js拼接url?name=XXX&gender=XXX,然后调用jQuery的ajax,往后台传参数,前端alert参数是正常的,后端的参数是乱码
- IIS HTTP 错误 500.19 - Internal Server Error 无法访问请求的页面,因为该页的相关配置数据无效
- SAP UI5的HTML调用view报错500 - Internal server error
- 安全沙箱冲突:ExternalInterface解决方法 js调用域的问题
- HTTP 错误 500.19 - Internal Server Error 无法访问请求的页面,因为该页的相关配置数据无效。
- HTTP 错误 500.19 - Internal Server Error 无法访问请求的页面,因为该页的相关配置数据无效。
- HTTP 错误 500.19 - Internal Server Error 无法访问请求的页面,因为该页的相关配置数据无效。
- HTTP 错误 500.19 - Internal Server Error 无法访问请求的页面,因为该页的相关配置数据无效
- 在IIS7.5打开网页的时候,提示: HTTP 错误 500.0 - Internal Server Error 调用 LoadLibraryEx 失败,在 ISAPI 筛选器 "C:\Windows\Microsoft.NET\Framework\v4.0.30319\\aspnet_filter.dll" 上。解决方法