我知道这里有很多关于打开子窗口和访问/修改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中正常工作吗?
答案 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();