我如何关闭在 Javascript 加载后打开的 window?

How do I close a window I opened after it loads with Javascript?

有没有办法让我在加载后在新 window 中打开 link?

这两种方法我都试过了,但是windows不会自己关闭。

方法一:

var winning = window.open("https://google.com/","","width=500,height=500");
winning.onload = function(){
  winning.close();
}:

方法二:

var winning = window.open("https://google.com/","","width=500,height=500");
winning.addEventListener('onload', function(){
  winning.close();
}, false);

我快要疯了。我是否遗漏了一些明显的东西,或者这根本不可能?

您遇到了相同的同源策略。您无法在不同来源的文档上捕获 load 事件(因为它告诉您页面已成功加载,这可能会泄露 "The user is logged into this site which would otherwise throw a Forbidden error" 等信息)。

如果我将 URL 更改为与出现 JavaScript 的页面具有相同来源的那个,那么它就可以工作了。

您最接近的是估计加载文档需要多长时间,然后使用 setTimeout 关闭它。

可以 将事件侦听器附加到另一个 window,但是 如果两个 windows 都打开同样的 domain/protocol/port.

Same-Origin Policy 限制了你可以跨源访问的属性和事件,不像 iframe (它触发了一个你可以收听的自己的 load 事件),你无法将 load 事件侦听器附加到使用 window.open 创建的 window,除非它们满足同源策略。


此外,请注意,这是一个错字:

winning.addEventListener('onload', function(){

应该是:

winning.addEventListener('load', function(){

使用 addEventListener 时不包括 on 前缀。