2015-11-02 6 views
12

file://のページとiframeのcontentWindowプロパティを持つリモートホストのiframeでドメイン間通信を行うことができます。私は実行することができますこのページでCordovaのクロスドメインファイル:// iframe contentwindowの通信

<script type="text/javascript" src="cordova.js"></script> 
<iframe id="appframe"></iframe> 

:コルドバをロードとiframeが含まれてい//.../index.html:私は、URLファイルでhtmlページを持っているデバイス上の例えば

IFRAMEをロードし、このようなiframeをページ内のオブジェクトの参照を保存するのjavascript:iframeの内部ページで今

var iframe = document.getElementById("appframe"); 
iframe.onload = function(){ 
    iframe.contentWindow.cordova = window.cordova; 
} 
iframe.src = "http://www.example.com/appframe.html"; 

http://www.example.com/appframe.html、私は例えば、コルドバの呼び出しを実行することができます。

cordova.exec(null, null, "StatusBar", "hide", []); 

これは予期せず動作し、StatusBar cordovaプラグインのネイティブレイヤーを呼び出し、ステータスバーを非表示にします。

私の質問は:

を使用して、これは安全ですかブラウザの将来のバージョンでは動作しませんハックですか?

iOS 9とAndroid 5デバイスでテストしました。

+0

appframeがfile:///から提供されている場合、これは機能しますか? –

+0

興味深い。あなたがあなたのコードをあなたのアプリケーションに埋め込んでいることを知ったとき、あなたのアプリケーションがプラグインを介してサポートしているコードと 'cordova.exec'を調整することができます。これは、リモートWebサイトを制御しないと、おそらく他のバグと結びついて、本当に大きな特典を得ることができます。あなたが明示的に 'codeova'への参照をiframeに注入する必要があるので、あなたがそれを許さない限りセキュリティホールではありません。 –

+0

@mircocあなたのように、私はまた、iframeのhtmlページ(ページのサイズは5Mbから100Mbになります)を読み込もうとしていますが、何度もアプリが「メモリ不足」というエラーでクラッシュします。この種の問題に直面しましたか?はいの場合は、この問題を解決する方法を教えてください。 – Deepika

答えて

0

おそらくconfig.xmlに次のタグがあると思います。ここで説明 https://cordova.apache.org/docs/en/latest/guide/appdev/whitelist/として

<access origin="*" /> 

あなたの代わりにワイルドカードを使用してのプロパティ「起源」の値として使用され、指定されたドメインにクロスドメインポリシーを制限することができます。

ワイルドカード値を使用している場合は、これが望ましい動作になるはずです。

0

私はアンドロイドどのように断片化され、どのように痛みを伴うが、下記4.3との後方互換性可能性に注意してください(デバイス間で矛盾が発生する可能性があり、MDNで説明したように、フレーム間で通信する安全な方法がpostMessageであると信じている別の方法でそれを行います)

だから、あなたは、iframe要素を取得することができ、その後、あなたはフレームの内側そのイベントに耳を傾けることができ、同じように

otherWindow.postMessage(InfoToSend, "*");

のようにMSGを投稿:

window.addEventListener("message", receiveMessage, false);

このノー原因クロスフレームの問題は意志とそれが情報を渡すために安全な方法となり、悪いニュースは、あなたがwindow.cordovaインスタンスを渡すことができないということですので、あなたが確立する必要があります。 iFramewindow.topフレームの間の会話。

+1

[CordovaのJIRAのこのバグ](https://issues.apache.org/jira/browse/CB-4897)も 'postMessage'のサポートを実装するために投票し、iframeを介した通信を保護する方法も示しています_secret共有キーを介して_ – Oliver

関連する問題