postMessage() を使用して、クロスドメイン iframe ページ間の情報転送メソッドを実装する_javascript スキル

WBOY
リリース: 2016-05-16 15:07:45
オリジナル
1396 人が閲覧しました

Web オリジン ポリシーの制限により、ページでクロスドメイン iframe リンクが使用されている場合、メイン ページとサブページは相互作用できず、ページ間の情報の転送に多くの問題が発生します。一連の試みの結果、最終的にそれを達成する次の方法を見つけました:

1. サブページ URL のパラメータを渡します

簡単に言うと、メイン ページと同じオリジンを持つ URL に渡す必要があるすべてのパラメータを追加し、サブページをその URL にリダイレクトします。その後、メイン ページは src を通じてこれらのパラメータを取得します。 iframe

プロセスは非常に複雑なので、この方法はお勧めできません

2. postMessage()

postMessage() は、HTML5 が提供するイベントベースのメッセージ送信 API であり、クロステキストドキュメント、マルチウィンドウ、クロスドメインメッセージングを実現できます。

postMessage(data,origin) メソッドは 2 つのパラメータを受け入れます

1.data: 渡されるデータ。HTML5 仕様では、このパラメータは JavaScript の任意の基本型またはコピー可能なオブジェクトにできると記載されていますが、一部のブラウザではこれができるわけではありません。パラメータを渡すときに、JSON.stringify() メソッドを使用してオブジェクト パラメータをシリアル化する必要があります。同様の効果は、IE の以前のバージョンで json2.js を参照することによって実現できます。

2.origin: ターゲット ウィンドウのソースを示す文字列パラメータ、プロトコル + ホスト + ポート番号 [+URL]。URL は無視されるため、このパラメータを記述する必要はありません。 postMessage() メソッドのみ メッセージは指定されたウィンドウに渡されます。もちろん、必要に応じてパラメータを「*」に設定することもできます。現在のウィンドウを原点とする場合は、「/」に設定します。

メッセージを送信 (サブページ)

function sendMessage(param) {
  var url;
  if (param.url) {
    url = param.url;
  };
  var dataJson = JSON.stringify({
     type:1,  
    a: param.c,
    b: param.c,
    c: param.c,
    url: url
  });
  window.parent.postMessage(dataJson, '*');
}
ログイン後にコピー

一部のブラウザは文字列パラメータのみを処理できるため、最初に JSON.stringfy() を使用してパラメータを文字列に変換し、次に受信ページで JSON.parse() を使用してパラメータを変換する必要があります。オブジェクトに戻ります。

メッセージを受信

サブページによって渡されるパラメーターについては、ウィンドウのメッセージ イベントをリッスンすることで取得できます。

window.addEventListener('message', function(e) {
var data = JSON.parse(e.data);
switch (data.type) {
ケース 1:
アラート(data.a);ブレーク;
}
}, false);

メッセージ イベントにはいくつかの重要な属性があります

1.data: 名前が示すように、
で渡されるメッセージです。 2.source: メッセージを送信するウィンドウオブジェクト
3.origin: メッセージウィンドウのソース (プロトコル + ホスト + ポート番号)
クロスドメインのメッセージ配信は、postMessage() メソッドとメッセージ イベントを通じて実現できます。デモでは、子ページを通じてメッセージを親ページに配信するため、送信とウィンドウへのウィンドウを使用します。受信:

window.parent.postMessage(dataJson, '*'); ホームページからサブページへの場合は、送信に window.frames[0] を使用する必要があります。

上記の記事は、クロスドメイン iframe ページ間の情報転送を実現するために postMessage() を使用しています。これは、エディターが共有したすべての内容です。参考にしていただければ幸いです。スクリプト ホームをサポートしていただければ幸いです。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート