我正在构建一个Chrome扩展程序,它将使用加载Flash内容的Iframe。在Iframe中使用Mootools,我正在创建一个.swf对象,然后将其注入自身。这个iframe,main.html,就是这样插入flash对象:
window.addEvent("domready", function () {
var flashContainer = $("flash-container");
new Swiff("http://www.example.com/content.swf", {
"width":"100%",
"height":"90%",
"id":"flash-content"
}).inject(flashContainer);
});
这会产生以下错误:
不安全的JavaScript尝试从包含网址http://www.example.com/main.html的网址使用网址chrome-extension://........ / index.html访问框架。域,协议和端口必须匹配。
当我删除代码的注入部分时,我没有收到错误。另外,当我在其他非flash元素上使用inject时,例如div,我没有得到错误。我也尝试过使用普通的'appendChild javascript方法来获取相同的错误。
任何想法为什么我只会在flash对象上出现此错误?有没有办法添加这个Flash元素而不会出现此错误?
答案 0 :(得分:1)
@MishcaNix和@serg是对的。
对非JSONP资源的任何跨域调用都会引发此安全错误。您需要找到一种方法将SWF内容注入到与swf文件相同的域中的页面中,或者使用SWF(如果它是静态的)并使其成为数据URL(数据:application / x-swf; base64,或者某些)。 - MischaNix
每当一个flash对象嵌入到跨域iframe中时,它就会抛出一个跨域异常。 Youtube和Vimeo也是如此。
例如,请使用嵌入的iFrame查看此jsfiddle:http://jsfiddle.net/bkCdB/
<object width="420" height="315"><param name="movie" value="http://www.youtube.com/v/6V_DsL1x1uY?version=3&hl=en_US"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/6V_DsL1x1uY?version=3&hl=en_US" type="application/x-shockwave-flash" width="420" height="315" allowscriptaccess="always" allowfullscreen="true"></embed></object>