私はAEM(Adobe Experience Manager - cms)内のコンポーネントをページに持っており、このページを(別のドメインの)別のページにiframe
。したがって、コンポーネントのコードではwindow.postMessage()
を使用していますが、そのイベントを親プロセスでリッスンしようとしています。私はiframe
の親とは通信してみましたが、正常に動作しましたが、他の方法で通信する必要があります。コンポーネントは検索コンポーネントなので、検索結果をクリックすると、親ウィンドウからリダイレクトしたいので、リダイレクト先のURLを送信してから親のJSコード内のリダイレクトを処理しようとしています。子ドメイン(iframe)から親ドメインへのクロスドメイン通信
コードは次のようになります。
のiframeから
function receiveMessage(e)
{
var key = e.message ? "message" : "data";
var data = e[key];
var redirect = JSON.parse(data);
redirectUrl = (redirect.origin ? redirect.origin : '') + (redirect.url ?
redirect.url : '');
if (redirectUrl) {
window.location.href = redirectUrl;
}
}
window.addEventListener("message", receiveMessage, false);
((親から - - HTML)
<iframe
width="1080"
height="700"
id="theFrame"
src="http://localhost:4502/content/zebra1/global/en_us/hey.html#q=print"
frameborder="0">
</iframe>
(JS親から) /子供 - js)
goToSearchResults : function(event){
var windowOrigin = location.origin;
if(arguments[0].length == 3){
var redirect = {
origin: windowOrigin,
url: arguments[0][1].url || ''
};
if(!$('#supportSearchWrap').data('iframe')) {
location.replace(redirect.url);
} else {
window.postMessage(JSON.stringify(redirect), windowOrigin);
}
}
logger.log(redirect.origin + redirect.url , this.model);
}
私にとっては効果がありません。誰かが私が間違ってやっていることやこれを行うためのより良い方法を誰に見ているのですか?
あなたは開発者用コンソールに表示されているエラーを追加できますか? –