如检测使用 window.open 打开的窗口的 onload 事件所述,以下解决方案是理想的:
/* 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"));
如下所述,其他评论和答案犯下了几个错误的误解。
以下脚本演示了定义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”(“中和 Google”?)
然后在单击任何 Google 命中之前单击此书签,因此任何这些命中的书签都是干净的,而不是 Google 对它们造成的杂种变态畸变。
使用Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:11.0) Gecko/20100101 Firefox/11.0
UA 字符串完成的测试。
需要注意的是,addEventListener
在 Firefox 中只有一个非标准的第四个布尔参数,它true
允许为外部页面实例化不受信任的内容触发器。
参考:
element.addEventListener | 文档对象模型 (DOM) | MDN:
特权和非特权页面之间的交互| 代码片段 | MDN: