PhoneGap から iOS の iframe にアクセスする
iOS (6.0.1) で PhoneGap(2.9.0) が iframe にアクセスするのに苦労しています。
アプリケーションの index.html は、iframe と、ロード後にフレームのコンテンツを読み取れるかどうかを確認する関数で構成されています。
アプリケーション index.html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="user-scalable=no, initial-scale=1,
maximum-scale=1, minimum-scale=1, width=device-width, height=device-height,
target-densitydpi=device-dpi" />
<script type="text/javascript" charset="utf-8" src="./phonegap.js"></script>
<title>Test</title>
</head>
<body style="background-color: #000;">
<iframe name="framewrap" id="framewrap"
style="border:0;position: absolute; top: 0;
left: 0;width: 100%; height:100%; background-color: #fff;"
src="http://www.somedomain.de/somepath/index.html">
</iframe>
<script type="text/javascript">
window.setTimeout(go, 2000);
function go(){
iframe = document.getElementById('framewrap');
innerDoc = iframe.contentWindow;
alert(innerDoc.document.getElementById('canvas'));
}
</script>
</body>
</html>
iframe 内のドキュメント:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<script type="text/javascript">
alert('iframe loaded');
</script>
<title>test</title>
</head>
<body style="margin:0;">
<canvas id="canvas" style="position: absolute; top:0; left:0;">
<p>Your browser does not support the canvas element.</p>
</canvas>
</body>
</html>
何が起こるのですか:
アプリケーションをビルドして Android (4.2.2) で実行すると、フレームがロードされ、1 つのアラートが通知され、iframe loaded
別のアラート ダイアログがポップアップして、HTMLCanvasElement
. ただし、iPod Touch でアプリを開くと、警告ダイアログが表示されます"null"
。iframe loaded
iframe がまったくロードされていないことを示すアラートがないこと。
これを機能させるために多くのことを試みましたが失敗しました。Mac を所有していないため、正しくデバッグできません。-りんご-
私が疑うもの:
アプリに同梱されている html ファイルはファイルとして実行され、file
プロトコルを使用します。iframe はhttp
プロトコルを使用します。したがって、同じオリジン ポリシーが適用され、iframe にアクセスできません。
よくわからない理由:
ただし、これは Android で動作しているため、プラットフォーム間で動作に一貫性がないことを意味します。ですから、私の疑いが正しいと完全に確信しているわけではありません。さらに、iframe loaded
アラートがないことは、同じオリジン ポリシーがキャンバス アラートの表示を妨げるだけのデスクトップと同じように少なくともフレームをロードする必要があるため、同じオリジン ポリシーが問題ではないことを示唆します。
したがって:
私の疑いは正しいですか?
プラットフォーム間で動作させる方法はありますか?
アドバイスに感謝し、誰かが私を助けてくれることを願っています。
時間を割いて読んでくれてありがとう!