この種のことをテストするときは、実際のWebサーバープロセスからドキュメントを提供する必要があります(つまり、URLはですhttp://...
)。ローカルリソース( URL)に適用されるセキュリティポリシーブラウザfile:///...
は、Webリソースの同一生成元ポリシーよりも制限が厳しい場合があります。(具体的には、一部のブラウザーは、ローカルファイルを、同じディレクトリ内の別のローカルファイルであっても、どのオリジンとも一致しないものとして扱います。)
単純なWebサーバー(または、必要に応じて複雑なWebサーバー:-))をマシンにインストールするだけです。
もう1つの注意点は、ウィンドウがまだロードされていない可能性があるため、子ウィンドウで関数をすぐに呼び出すことができない可能性があることです。objReceiver
したがって、次のように、子に表示されるのを監視できます。
jQuery(function($) {
$("#target").click(function() {
// Open the window
var wnd = window.open("http://jsbin.com/ofigis/1");
// Give it a 10th of a second to appear
display("Window open, waiting for it to appear...");
setTimeout(watchForWindow, 100);
// Our function watching for it
function watchForWindow() {
// Is it there?
if (wnd.objReceiver) {
// Good, we're done waiting -- send the message
wnd.objReceiver({
foo: "blah"
});
display("Message sent");
}
else {
// Not there yet, keep waiting...
setTimeout(watchForWindow, 0);
}
}
});
function display(msg) {
$("<p>").html(String(msg)).appendTo(document.body);
}
});
実例| ソース
(私は便宜上jQueryを使用していますが、基本的なビットはどれもそれに依存していません)