SWF沙箱违规Chrome中的错误#2060

时间:2014-11-14 01:22:46

标签: javascript actionscript-3 google-chrome flash

我使用swfobject将CDN中的SWF对象嵌入到页面中。

var flashvars = {};
var params = { allowscriptaccess: "always"};
window.swfobject.embedSWF(self.options.img_url+'/click2call.swf', "ISC2C_SwfContainer", "1", "1", "9.0.0", flashvars, params);

但是,当我在Chrome中加载页面时,出现此错误:

  

SecurityError:错误#2060:安全沙箱违规:   ExternalInterface调用者http://cdn.url/SWFObject.swf无法访问   https://na1.salesforce.com/00Q/o。在   flash.external :: ExternalInterface $ / _ evalJS()at   flash.external :: ExternalInterface $ / call()at SWFObject / initApp()at   SWFObject / ___ swfobject_Application1_applicationComplete()at   flash.events :::EventDispatcher / dispatchEventFunction()at   flash.events :::EventDispatcher / dispatchEvent()...错误继续   而

我读到这个错误可以通过AllowScriptAccess标志解决,所以我添加了它。

我还在this SO answer中看到,Chrome浏览器Flash插件无法进行沙盒处理,这似乎是一个错误? - sandbox bug answer

这似乎是正确的,因为我能够在Firefox中成功嵌入,加载和使用该对象。

我有this answer所述的Security.allowDomain(" *")设置。我没有设置Security.allowInsecureDomain。

有没有办法在Chrome中修复此错误?

1 个答案:

答案 0 :(得分:2)

这可能有点晚了,但我最近遇到了类似的问题。如果您使用file:// scheme或chrome-extension:// scheme运行HTML页面,可以告诉我吗?

如果是这种情况,那么flash将不允许您调用ExternalInterface.call()或ExternalInterface.addCallback()。您的页面必须通过本地或远程主机上的HTTP服务器加载。它不仅仅是重要的SWF文件的位置,而且是嵌入SWF文件的容器页面的位置(实际上我不确定flash是否完全检查SWF文件的实际位置说实话,但肯定是检查容器页面的位置。

总而言之,这些不起作用:

file:///C:/Local/Folder/page.html
chrome-extension://<extension_id>/page.html

这些将起作用:

http://subdomain.domain/page.html
https://subdomain.domain/page.html

编辑:如果你真的想使用file://或chrome-extension://方案或类似的本地方案,那么我建议你添加SWF文件的路径或上面的路径它位于全局安全设置页面的层次结构中:

http://www.macromedia.com/support/documentation/en/flashplayer/help/settings_manager04.html