1

ここには、子ウィンドウを開いて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 で正しく動作しませんか?

4

2 に答える 2

0

試す:

var win = window.open('', 'window', '', '');
var txt = document.getElementById("main_title").innerHTML;
win.document.open();
win.document.write(''+ txt + '');
win.document.close();
于 2012-10-19T17:27:47.207 に答える
0

インナー HTML を使用する

$(win.document).contents().find('#main_title').innerHTML('2');
于 2012-10-19T17:15:10.733 に答える