如Detecting the onload event of a window opened with window.open 所述,以下解决方案是理想的:
/* Internet Explorer will throw an error on one of the two statements, Firefox on the other one of the two. */
(function(ow) {
ow.addEventListener("load", function() { alert("loaded"); }, false);
ow.attachEvent("onload", function() { alert("loaded"); }, false);
})(window.open(prompt("Where are you going today?", location.href), "snapDown"));
其他 cmets 和答案犯了几个错误的误解,如下所述。
以下脚本演示了定义onload 的反复无常。将脚本应用于正在打开的窗口的“快速加载”位置,例如具有file: 方案的位置,并将其与“慢”位置进行比较以查看问题:可以看到onload 消息或根本没有(通过重新加载加载的页面可以看到所有 3 个变体)。还假设正在加载的页面本身没有定义onload 事件,这会使问题更加复杂。
onload 定义显然不是“内部弹出文档标记”:
var popup = window.open(location.href, "snapDown");
popup.onload = function() { alert("message one"); };
alert("message 1 maybe too soon\n" + popup.onload);
popup.onload = function() { alert("message two"); };
alert("message 2 maybe too late\n" + popup.onload);
你可以做什么:
- 打开一个带有“外来”URL 的窗口
- 在该窗口的地址栏上输入
javascript: URI——代码将以与“外来”URL 域相同的权限运行
如果在地址栏中键入 javascript: URI 无效(可能是 2012 年左右发布的某些浏览器的情况),则可能需要将其添加书签
因此,几乎任何页面,无论来源如何,都可以修改为:
if(confirm("wipe out links & anchors?\n" + document.body.innerHTML))
void(document.body.innerHTML=document.body.innerHTML.replace(/<a /g,"< a "))
嗯,差不多:
jar:file:///usr/lib/firefox/omni.ja!/chrome/toolkit/content/global/aboutSupport.xhtml,Mozilla Firefox 的疑难解答页面和其他 Jar 档案除外。
作为另一个示例,要定期禁用 Google 篡夺目标命中,请将其 rwt 函数更改为以下 URI:
javascript: void(rwt = function(unusurpURL) { return unusurpURL; })
(可选择将上述内容添加为书签,例如“Spay Google”(“neutralize Google”?)
然后在点击任何 Google 点击之前点击此书签,因此任何这些点击的书签都是干净的,而不是 Google 用它们制造的杂乱无章的变态异常。
使用Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:11.0) Gecko/20100101 Firefox/11.0 UA 字符串完成的测试。
需要注意的是,Firefox 中的addEventListener 只有一个非标准的第四个布尔参数,如果true 允许为外部页面实例化不受信任的内容触发器。
参考:
element.addEventListener | Document Object Model (DOM) | MDN:
Interaction between privileged and non-privileged pages | Code snippets | MDN: