我知道这里有无数关于打开子窗口和访问/修改 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 中根本无法正常工作吗?