2011-11-07 17 views
2

Flashコンテンツを読み込むIframeを使用するChrome拡張機能を構築しています。 IframeでMootoolsを使って、私は.swfオブジェクトを作成し、それをそれ自身に注入します。これインラインフレームは、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); 
}); 

これは、次のエラーを生成します:URLクローム拡張子を持つフレームにアクセスするための

安全でないJavaScriptの試みを:// ... ...../index.html URL http://www.example.com/main.htmlのフレームから。ドメイン、プロトコル、ポートは一致する必要があります。

コードの注入部分を削除すると、エラーは発生しません。また、divなどの他の非フラッシュ要素でinjectを使用すると、エラーは発生しません。私はまた、同じエラーを取得するためにだけプレーンオール 'appendChildのjavascriptメソッドを使用してみました。

フラッシュオブジェクトだけでこのエラーが発生するのはなぜですか?そして、このエラーが発生することなく、このフラッシュ要素を追加する方法はありますか?

+0

どれクロスドメインコールをJSONPは、このセキュリティエラーが発生しますないリソースに。 swfファイルと同じドメインのページにSWFコンテンツを挿入する方法や、静的な場合はSWFを取得してデータURLにする方法(data:application/x-swf ; base64、またはsomesuch)。 – 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

フラッシュオブジェクトがクロスドメイン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&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>