0

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 loadediframe がまったくロードされていないことを示すアラートがないこと。

これを機能させるために多くのことを試みましたが失敗しました。Mac を所有していないため、正しくデバッグできません。-りんご-

私が疑うもの:

アプリに同梱されている html ファイルはファイルとして実行され、fileプロトコルを使用します。iframe はhttpプロトコルを使用します。したがって、同じオリジン ポリシーが適用され、iframe にアクセスできません。

よくわからない理由:

ただし、これは Android で動作しているため、プラットフォーム間で動作に一貫性がないことを意味します。ですから、私の疑いが正しいと完全に確信しているわけではありません。さらに、iframe loadedアラートがないことは、同じオリジン ポリシーがキャンバス アラートの表示を妨げる​​だけのデスクトップと同じように少なくともフレームをロードする必要があるため、同じオリジン ポリシーが問題ではないことを示唆します。

したがって:

  1. 私の疑いは正しいですか?

  2. プラットフォーム間で動作させる方法はありますか?

アドバイスに感謝し、誰かが私を助けてくれることを願っています。

時間を割いて読んでくれてありがとう!

4

1 に答える 1

0

私は iframe の専門家ではありませんが、ヒントを提供します.. iframe ( http://api.jquery.com/load/ ) の代わりに jquery out の load 関数を使用するか、html を返すことができる GET を使用します。型の戻りデータと div での表示 ...

たぶん、マウントしようとしているiframeのより簡単な代替手段です...

于 2013-07-19T19:39:03.980 に答える