ホームページ  >  記事  >  ウェブフロントエンド  >  JavaScript クロスドメインの概要: window.name_javascript スキルによって実装されたクロスドメイン データ送信

JavaScript クロスドメインの概要: window.name_javascript スキルによって実装されたクロスドメイン データ送信

WBOY
WBOYオリジナル
2016-05-16 15:34:281205ブラウズ

私自身も試してみましたが、とてもうまくいきました。具体的な実装方法は以下に記録します

3 つのページがあります:

a.com/app.html: アプリケーションページ。
a.com/proxy.html: プロキシ ファイル (通常はコンテンツのない HTML ファイル) は、アプリケーション ページと同じドメインに存在する必要があります。
b.com/data.html: アプリケーション ページがデータを取得する必要があるページをデータ ページと呼ぶことができます。

実装する基本的な手順は次のとおりです:

アプリケーション ページ (a.com/app.html) で iframe を作成し、その src がデータ ページ (b.com/data.html) を指すようにします。
データ ページは、この iframe の window.name にデータを追加します。data.html コードは次のとおりです:

  <script type="text/javascript">
    window.name = 'I was there!';  // 这里是要传输的数据,大小一般为2M,IE和firefox下可以大至32M左右
                     // 数据格式可以自定义,如json、字符串
  </script>

アプリケーション ページ (a.com/app.html) で iframe の onload イベントをリッスンします。このイベントでは、この iframe の src がローカル ドメインのプロキシ ファイル (プロキシ ファイルとアプリケーション ページは同じドメインの下にあるため、相互に通信できます)。 app.html のコードの一部は次のとおりです:

<script type="text/javascript">
    var state = 0, 
    iframe = document.createElement('iframe'),
    loadfn = function() {
      if (state === 1) {
        var data = iframe.contentWindow.name;  // 读取数据
        alert(data);  //弹出'I was there!'
      } else if (state === 0) {
        state = 1;
        iframe.contentWindow.location = "http://a.com/proxy.html";  // 设置的代理文件
      } 
    };
    iframe.src = 'http://b.com/data.html';
    if (iframe.attachEvent) {
      iframe.attachEvent('onload', loadfn);
    } else {
      iframe.onload = loadfn;
    }
    document.body.appendChild(iframe);
  </script>

データを取得した後に iframe を破棄し、メモリを解放します。これにより、セキュリティも確保されます (他のドメイン フレーム js からアクセスされません)。

<script type="text/javascript">
    iframe.contentWindow.document.write('');
    iframe.contentWindow.close();
    document.body.removeChild(iframe);
  </script>

要約すると、iframe の src 属性は外部ドメインからローカル ドメインに転送され、クロスドメイン データは iframe の window.name によって外部ドメインからローカル ドメインに転送されます。これはブラウザのクロスドメイン アクセス制限を巧みに回避しますが、同時に安全な操作でもあります。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。