为什么在window.open的tab opend上没有onload事件工作?

use*_*782 6 javascript browser jquery dom dom-events

我打开一个新的空白标签.现在,从此选项卡我需要在新选项卡中打开一个网站.我这样做如下.在我的控制台中我写道:

var wild = window.open("https://css-tricks.com/", "mywin", '');
Run Code Online (Sandbox Code Playgroud)

这很好.现在我可以访问这个新窗口了wild.document.现在我希望在加载dom之后在该页面上执行一些代码.我将onload事件用作:

function foo(){
    var mytext = wild.document.body.textContent;
    alert( mytext );
}
wild.addEventListener("load", foo);
Run Code Online (Sandbox Code Playgroud)

但不幸的是,警报不会发生.我也尝试将事件监听器放在匿名自调用函数中,如本答案中所述,但这也不起作用.我也试过ondomload事件,但不幸的是,这也没有用.所以,

为什么在window.open的tab opend上没有onload事件工作?以及如何让它正常工作?

gae*_*noM 5

检测使用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);
});

// the following handler only used for test purposes
document.addEventListener('click', function(e) {
  try {
    alert(wild);
  } catch(err) {
    alert(err);
  }
}, false);
Run Code Online (Sandbox Code Playgroud)

我在源页面上添加了一个侦听器,以便您只需单击页面即可测试wild变量的值。

对于静态页面没有问题。

但是,如果您需要打开经典的“ http://google.com/ ”页面,请在开始页面上单击以下错误:

在此处输入图片说明

并且,从调试环境:

在此处输入图片说明

什么意思 当您打开google页面时,google会自行重定向,这是您无法控制的。

为什么会这样?为了避免刮......只是举例而已。

是否可以添加这样的侦听器(负载)?是的,但是我知道的唯一方法是创建chrome扩展名,FF扩展名或IE .....,因为扩展api(javascript)使您可以轻松进行此操作。

如果你有兴趣在Chrome API可能会采取一看清单,并更详细地一段名为“content_scripts”,如:

"content_scripts": [{
"matches":    ["*://*/*"],
"js":         ["content.js"],
"run_at": "document_end",
"all_frames": true
Run Code Online (Sandbox Code Playgroud)

}],

其中的“ run_at”参数:

控制何时注入js中的文件。可以是“ document_start”,“ document_end”或“ document_idle”。默认为“ document_idle”。


use*_*458 0

请尝试这个,

function foo() {
    var wild = window.open("http://google.com/", "mywin", '');
    wild.addEventListener("load", function(){
        var mytext = wild.document.body.textContent;
        alert( mytext );        
    });
}
Run Code Online (Sandbox Code Playgroud)