使用javascript(到不同的来源)在新窗口中打开网址时,有没有办法在加载时关闭窗口?
以下工作正常:
var callWindow = $window.open("http://myexternalsite/?stuff=blah", "_blank");
callWindow.close();
但显然它会在http://myexternalsite/?stuff=blah
的请求发送之前关闭窗口。我不关心收到回复,只是确保请求完成。
我无法将window.close()
事件添加到响应页面中,因为那不是打开它的脚本...所以我所剩下的就是手动超时并希望它及时完成。
我也不能将此作为简单的http请求执行,因为该站点在https上运行,而且呼叫是在没有ssl证书的(内部网络)服务器上。
答案 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
函数中确定已打开的页面已确认应该关闭它,则将其关闭。