如在检测使用window.open打开的窗口的onload事件中所述,以下解决方案是理想的:
(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"));
其他评论和答案存在一些错误的误解,如下所述。
以下脚本演示了定义 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);
你可以做以下事情:
- 打开一个有“外部”网址的窗口
- 在窗口的地址栏中输入一个
javascript:
URI - 该代码将与“外部”网址的域具有相同的特权
如果在地址栏中输入没有效果(可能是2012年左右发布的某些浏览器的情况),则可能需要将javascript:
URI 添加到书签中。
因此,几乎可以修改任何页面的来源:
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对目标点击的篡改,使用以下URI更改其rwt
函数:
javascript: void(rwt = function(unusurpURL) { return unusurpURL; })
(可选择将以上内容作为书签命名为“Spay Google”(“中和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:
$(...).onload
做什么?为什么不直接用window.popup.onload
? - Crescent Fresh