2011-11-07 164 views
2

我正在構建一個Chrome擴展,它將使用加載Flash內容的Iframe。在Iframe中使用Mootools,我創建一個.swf對象,然後將它注入到自身中。此iframe,main.html中,被插入Flash對象,像這樣:從Chrome擴展中Iframe訪問不安全Javascript訪問

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嘗試與URL鉻擴展訪問框架:// ... ...../index.html與網址http://www.example.com/main.html。域,協議和端口必須匹配。

當我刪除代碼的注入部分,我沒有得到錯誤。另外,當我在其他非Flash元素(例如div)上使用注入時,我不會收到錯誤。我也嘗試使用純ol'appendChild javascript方法來獲得相同的錯誤。

任何想法,爲什麼我會只在Flash對象上得到這個錯誤?有沒有辦法添加這個Flash元素而沒有得到這個錯誤?

+0

任何跨域調用的資源,是不是JSONP將提高這個安全錯誤。您需要找到一種方法將SWF內容注入到與swf文件相同的域中的頁面上,或者將SWF(如果它是靜態的)添加到數據URL(data:application/x-swf ; base64,'或其他)。 – MischaNix

+0

我從example.com創建SWF並將其注入到example.com。那如何不構成跨域? Chrome擴展本身就是加載iframe,將所有這一切都完成了。 –

+0

什麼是swf,'chrome-extension://./ index.html'的iframe url? – serg

回答

1

@MishcaNix和@serg是對的。

Any cross-domain call to a resource that isn't JSONP will raise this security error. You'll need to either find a way to inject the SWF content into a page on the same domain as the swf file, or take the SWF (if it's static) and make it a data URL (data:application/x-swf;base64, or somesuch). – MischaNix

每當Flash對象嵌入到跨域iframe中時,它將引發跨域異常。 Youtube和Vimeo都是如此。

例如,看看這個的jsfiddle嵌入一個iFrame:http://jsfiddle.net/bkCdB/

<object width="420" height="315"><param name="movie" value="http://www.youtube.com/v/6V_DsL1x1uY?version=3&amp;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&amp;hl=en_US" type="application/x-shockwave-flash" width="420" height="315" allowscriptaccess="always" allowfullscreen="true"></embed></object>