在请求发送后关闭用 javascript 打开的 window

closing a window opened with javascript after the request has sent

在带有 javascript 的新 window 中打开 url 时,有没有办法在加载时关闭 window(到不同的来源)?

以下工作正常:

var callWindow = $window.open("http://myexternalsite/?stuff=blah", "_blank");
callWindow.close();

但显然它会在向 http://myexternalsite/?stuff=blah 发送请求之前关闭 window。我不关心得到响应,只关心请求完成。

我无法将 window.close() 事件添加到响应页面,因为那不是打开它的脚本...所以看来我剩下的只是手动超时,希望它能及时完成.

我也不能只将此作为一个简单的 http 请求来执行,因为该站点在 https 上运行并且调用是针对没有 ssl 证书的(内部网络)服务器。

您需要让 window 您正在打开的页面告诉您的页面它已加载。最好的方法是使用 postMessage.

https://developer.mozilla.org/en-US/docs/Web/API/Window/postMessage

首先,您的页面需要开始侦听消息:

window.addEventListener("message", messagelistener);

其次,您在新 window 中加载的页面必须 post 向其开启者(您的页面)发送一条消息:

window.opener.postMessage(message, targetOrigin);

targetOrigin 是一个字符串,必须匹配您页面的主机(协议 + 主机名 + 端口)

您需要创建 messageListener 事件处理函数。在此您应该验证 event.origin 是您打开的页面,以便此消息实际上来自该页面。

您从打开的页面发送的 message 可用于验证是否一切正常,或者您可以发送任何内容,在您的 messageListener 中假设来自打开的任何消息页面意味着它加载正常。

如果您在 messageListener 函数中确定打开的页面已验证应该关闭,则将其关闭。