ここには、子ウィンドウを開いてDOMにアクセス/変更することに関する無数の投稿があることを知っています。それらすべてを読んだと思いますが、まだ機能させることができません。これはIEで機能します:
// Find element with id="main_title" in child window and set its content to "2"
function generateRecipe () {
var windowSize = "width=1300,height=1100,scrollbars=yes,menubar=yes,toolbar=yes";
var win = window.open("template_without_img.html", "displayWindow", windowSize);
$(win.document).ready(function () {
$(win.document).contents().find('#main_title').html('2');
});
}
しかし、Firefox 16 では機能しません。なぜですか? 親ウィンドウの値にアクセスするために子ウィンドウの下部にコードを配置するなど、さまざまなバリエーションを試しました。
最終的に、Firefox 16 で機能するものを 1 つ見つけました。
var win;
function generateRecipe () {
var windowSize = "width=1300,height=1100,scrollbars=yes,menubar=yes,toolbar=yes";
win = window.open("template_without_img.html", "displayWindow", windowSize);
setTimeout(continueExecution, 1000);
}
function continueExecution() {
$(win.document).contents().find('#main_title').html('2');
}
私は確かにこれを行うことができますが、私はまだ JQuery を学んでおり、ハックに頼るのではなく、これらのことを正しい方法でやり始めたいと思っています。
Firefox エラー コンソールには次のように表示されます。
エラー: gBrowser.addProgressListener が 2 番目の引数で呼び出されましたが、これはサポートされていません。バグ 608628 を参照してください。
これは Firefox 16 の何らかのバグですか? セキュリティと関係がありますか (親と子の両方の HTML ファイルがマシン上にあります)。それとも、私は何か間違ったことをしていますか?
より詳しい情報。Firefox で動作するものを見つけましたが、残念ながら IE では動作しません。$(win.document).ready() の代わりに $(win).load() を使用する:
function generateRecipe () {
var windowSize = "width=1300,height=1100,scrollbars=yes,menubar=yes,toolbar=yes";
win = window.open("template_without_img.html", "displayWindow", windowSize);
$(win).load(function() {
$(win.document).contents().find('#main_title').html('2');
});
}
これはとても紛らわしいです。何が起こっているのか知りたいです。ready() は単に Firefox で正しく動作しませんか?