ホームページ > ウェブフロントエンド > jsチュートリアル > postMessage() を使用して iframe クロスドメイン ページ間で情報を転送する_javascript スキル

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

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

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) {
case 1:
alert(data.a);break;
}
}, false); 
ログイン後にコピー

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

1.data: 名前が示すように、
で渡されるメッセージです。

2.source: メッセージを送信するウィンドウオブジェクト

3.origin: メッセージウィンドウのソース (プロトコル + ホスト + ポート番号)

クロスドメインのメッセージ配信は、postMessage() メソッドとメッセージ イベントを通じて実現できます。デモでは、子ページを通じて親ページにメッセージを配信するため、送信には window.parent を使用します。と受信するウィンドウ:

window.parent.postMessage(dataJson, '*');

ホームページからサブページへの場合は、送信に window.frames[0] を使用して受信する必要があります。

上記の内容は、postMessage() を使用して iframe クロスドメイン ページ間の情報転送を実現するための編集者の紹介です。皆様のお役に立てれば幸いです。

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