我打开一个新的空白标签。现在,从此选项卡我需要在新选项卡中打开一个网站。我这样做如下。在我的控制台中我写道:
var wild = window.open("https://css-tricks.com/", "mywin", '');
这很好。现在我可以使用wild.document
访问这个新窗口。现在我希望在加载dom之后在该页面上执行一些代码。我使用onload
事件:
function foo(){
var mytext = wild.document.body.textContent;
alert( mytext );
}
wild.addEventListener("load", foo);
但不幸的是,警报不会发生。我也尝试将事件监听器作为explained in this answer放在匿名自调用函数中,但这也不起作用。我也试过ondomload事件,但不幸的是,这也没有用。所以,
为什么在window.open的tab opend上没有onload事件工作?以及如何让它正常工作?
如Detecting the onload event of a window opened with window.open所述,以下演示工作正常:
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);
});
// the following handler only used for test purposes
document.addEventListener('click', function(e) {
try {
alert(wild);
} catch(err) {
alert(err);
}
}, false);
我在源页面上添加了一个监听器,这样您只需单击页面即可测试Wild变量的值。
对于静态页面没有问题。
但是,如果您需要打开经典的“http://google.com/”页面,您将看到,点击起始页面时出现以下错误:
并且,从调试环境:
他们是什么意思?当您打开谷歌页面时,谷歌会自行重定向,这是你无法控制的。
为什么会这样?为了避免刮擦......仅举例来说。
是否可以添加这样的监听器(加载)?是的,但我知道的唯一方法是创建chrome扩展,或FF扩展或IE .....因为扩展api(javascript)为您提供了无痛苦的可能性。
如果您对Chrome api感兴趣,可以查看manifest以及更多详细信息,如"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”。
您正在加载外部网站,因此您应该收到跨源框架错误(我在Chrome控制台中测试您的代码时会这样做。)当我在Firefox中测试它时,窗口对象为空。在Safari中,对象未定义。
即使使用setTimeout
,对象为null或抛出错误,所以如果你说它使用setTimeout
工作,我会分享该代码。除非原点相同(因此页面相同),否则不允许您访问另一个窗口的文档。至少这是我的理解。
我会在第一页打开另一个窗口有一个脚本:
<body>
<script type="text/javascript">
window.open('http://www.linktoyourotherpage.com/', 'mywin', '');
</script>
</body>
以及操作文档的另一个页面的脚本
<body onload="foo()">
<script type="text/javascript">
function foo() {
var mytext = document.body.textContent;
alert( mytext );
}
</script>
</body>
请试试这个,
function foo() {
var wild = window.open("http://google.com/", "mywin", '');
wild.addEventListener("load", function(){
var mytext = wild.document.body.textContent;
alert( mytext );
});
}
加载每个文档时会触发window.onload事件。
var wild=null;
function load() {
if(wild !=null)
{
alert("load event detected! :"+wild.location.hostname+wild.location.pathname);
}
else
alert("not yet loaded");
}
window.onload = load;
wild = window.open("https://www.google.co.in/", "mywin", ''); // Security Exception raise due to Cross orgin security enabled google.co.in
// wild = window.open("https://localhost:5555/test.html", "mywin", ''); //This will work when same origin policy
console.log("After Loading ...");