在请求发送后关闭使用javascript打开的窗口

时间:2017-05-23 15:13:16

标签: javascript angular same-origin-policy

使用javascript(到不同的来源)在新窗口中打开网址时,有没有办法在加载时关闭窗口?

以下工作正常:

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

但显然它会在http://myexternalsite/?stuff=blah的请求发送之前关闭窗口。我不关心收到回复,只是确保请求完成。

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

我也不能将此作为简单的http请求执行,因为该站点在https上运行,而且呼叫是在没有ssl证书的(内部网络)服务器上。

1 个答案:

答案 0 :(得分:1)

您需要在您打开的窗口中创建页面,告诉您的页面已加载。最好的方法是使用postMessage

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

首先,您的网页需要开始收听消息:

window.addEventListener("message", messagelistener);

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

window.opener.postMessage(message, targetOrigin);

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

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

您从打开的页面发送的message可用于验证所有内容是否正常,或者您可以发送任何内容并在messageListener中,只是假设打开的页面中的任何消息都意味着加载好了。

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