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 中有效的一件事:

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,并希望以正确的方式开始做这些事情,而不是依赖 hack。

Firefox 错误控制台这样说:

错误:使用不支持的第二个参数调用 gBrowser.addProgressListener。请参阅错误 608628。

那么这是 Firefox 16 中的某种错误吗?它是否与安全有关(父 HTML 文件和子 HTML 文件都在我的机器上)?还是我只是做错了什么?

更多信息。找到了其他可以在 Firefox 中使用的东西,但不幸的是它在 IE 中不起作用。使用 $(win).load() 而不是 $(win.document).ready():

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

使用内部 HTML

$(win.document).contents().find('#main_title').innerHTML('2');
于 2012-10-19T17:15:10.733 回答
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 回答