私はこれを見つけました sample from SO私の問題を閲覧しているときに、私のシナリオでそれを使用する方法を正確に知りたいです。私は別のものからのiframeを持っていますドメインで、iframeのURLが別のドメインのあるページから別のページに変更されたことを検出したいので、iframeの2番目のページを開いたときに次のようなものを考えていました。
<script type="text/javascript">
$(document).ready(function() {
parent.postMessage("Second Page");
}
</script>
必要なのはそれだけです。iframeのURLが異なるというメッセージを受信する必要があります。親ページに、次のようなものがあります。
<script type="text/javascript">
$(document).ready(function() {
$('#frame').load(function () {
var eventMethod = window.addEventListener ? "addEventListener" : "attachEvent";
var eventer = window[eventMethod];
var messageEvent = eventMethod == "attachEvent" ? "onmessage" : "message";
// Listen to message from child window
eventer(messageEvent,function(e) {
var secondPageValue = // I want to get the value from the child page here, how can I do that?
},false);
});
});
</script>
私はこのpostMessageオプションを初めて使用しようとしているので、すべてのアドバイスをいただければ幸いです。また、これを機能させるには、子側にjqueryなどのJSライブラリを含める必要がありますか?
よろしくお願いします、Laziale
PostMessageを使用する場合は、targetOriginを設定する必要があります。
<script type="text/javascript">
$(document).ready(function() {
parent.postMessage("Second Page",'*');
}
</script>
次に、[ホスト]ページで。
function addAnEventListener(obj,evt,func){
if ('addEventListener' in obj){
obj.addEventListener(evt,func, false);
} else if ('attachEvent' in obj){//IE
obj.attachEvent('on'+evt,func);
}
}
function iFrameListener(event){
secondPageValue = event.data;
}
var secondPageValue='';
addAnEventListener(window,'message',iFrameListener);
チェック http://davidwalsh.name/window-iframe アウト。これは完璧な実例です。
親オブジェクトは、子からメインウィンドウへの参照を提供します。したがって、iFrameがあり、その中に親をコンソールする場合、コンソールは次のようになります。
// Every two seconds....
setInterval(function() {
// Send the message "Hello" to the parent window
// ...if the domain is still "davidwalsh.name"
parent.postMessage("Hello","http://davidwalsh.name");
}, 3000);
これでウィンドウが保持されたので、それにメッセージを投稿できます。
// Create IE + others compatible event handler
var eventMethod = window.addEventListener ? "addEventListener" : "attachEvent";
var eventer = window[eventMethod];
var messageEvent = eventMethod == "attachEvent" ? "onmessage" : "message";
// Listen to message from child window
eventer(messageEvent,function(e) {
console.log('parent received message!: ',e.data);
},false);
上記のディレクティブは、iFrameをトリガーして3秒ごとに親ウィンドウにメッセージを送信します。メインウィンドウからの最初のメッセージは必要ありません!