JQuery修改Firefox和.ready()中的子窗口

时间:2012-10-19 17:11:33

标签: jquery

我知道这里有很多关于打开子窗口和访问/修改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,并希望以正确的方式开始做这些事情而不是依赖黑客。

Firefox错误控制台说:

错误:使用第二个参数调用了gBrowser.addProgressListener,但不支持该参数。见错误608628。

这是Firefox 16中的某种错误吗?它与安全性有关(父和子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中正常工作吗?

2 个答案:

答案 0 :(得分:0)

使用innerHTML

$(win.document).contents().find('#main_title').innerHTML('2');

答案 1 :(得分:0)

尝试:

var win = window.open('', 'window', '', '');
var txt = document.getElementById("main_title").innerHTML;
win.document.open();
win.document.write(''+ txt + '');
win.document.close();