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事件工作?以及如何让它正常工作?
如检测使用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”。
请尝试这个,
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)