如检测使用window.open打开的窗口的onload事件所述,以下演示可以正常工作:
var wild;
window.addEventListener('DOMContentLoaded', function(e) {
wild = window.open("myLocalStaticPage.html", "mywin", '');
wild[wild.addEventListener ? 'addEventListener' : 'attachEvent'](
(wild.attachEvent ? 'on' : '') + 'load', function (e) {
alert("loaded")
}, false);
});
document.addEventListener('click', function(e) {
try {
alert(wild);
} catch(err) {
alert(err);
}
}, false);
我在源页面上添加了一个监听器,这样你就可以通过单击页面来测试wild变量的值。
对于静态页面没有问题。
但是,如果你需要打开经典的 "http://google.com/" 页面,你会看到,在起始页面上单击会出现以下错误:
![enter image description here](https://istack.dev59.com/Er7HJ.webp)
而且,来自调试环境:
![enter image description here](https://istack.dev59.com/2c0lU.webp)
当你打开谷歌页面时,谷歌会自动重定向,这是无法控制的。这意味着什么?
为了避免网络爬虫等问题。
是否可以添加这样的监听器(负载)?
是的,但我所知道的唯一方法是创建一个Chrome扩展程序、FF扩展程序或IE扩展程序……因为扩展程序API(JavaScript)为您提供了无痛操作的可能性。
如果您对Chrome API感兴趣,可以查看
清单,并详细了解名为
"content_scripts"的部分。
"content_scripts": [{
"matches": ["*://*/*"],
"js": ["content.js"],
"run_at": "document_end",
"all_frames": true
}],
其中的 "run_at" 参数:
控制 js 文件注入的时间。可以是 "document_start"、"document_end" 或 "document_idle" 中的任意一个。默认为 "document_idle"。
setTimeout
函数代替onload
函数,那么它就能完美地运行。所以我猜这不是因为同源策略的问题。 - user31782