如何从Edge IE模式跳转至Edge非IE模式并弹出新窗口(无需调用window)
Edge IE模式跳转至非IE模式并自动关闭原窗口(无需调用window对象)
在Edge的IE兼容模式下,需实现从当前IE模式窗口(A窗口)唤起Edge非IE模式的新窗口(B窗口),且要求不调用window对象,但目前测试中仅能成功唤起B窗口,A窗口无法自动关闭。测试代码如下:
<html> <head> <script type="text/javascript"> function test() { location.href = 'microsoft-edge:https://www.google.com'; } function popup(){ let options = "toolbar=no,scrollbars=no,resizable=yes,status=no,menubar=no"; window.open("microsoft-edge:"+"https://www.google.com", options); } </script> </head> <body> <br> <a href="microsoft-edge:https://www.google.com" rel="noopener noreferrer">href direct</a><br> <br> <a href="#" onclick="test();">location</a><br> <br> <a href="#" onclick="popup();">window open</a><br> <br> <a href="microsoft-edge:http://www.google.com" onclick="window.open(this.href,'_blank');return false;">onclick</a> </body> </html>
解决方案
方案1:Meta标签组合实现(无JS跳转,兼容IE模式关闭限制)
通过双meta标签先唤起非IE模式窗口,再跳转至空白页触发关闭,全程无需调用window对象完成跳转:
<html> <head> <!-- 立即唤起Edge非IE模式窗口 --> <meta http-equiv="refresh" content="0; url=microsoft-edge:https://www.google.com"> <!-- 延迟1秒跳转至空白页,触发关闭逻辑 --> <meta http-equiv="refresh" content="1; url=about:blank"> <script> // 仅在空白页加载时执行关闭,避免干扰新窗口 window.onload = function() { if (document.URL === "about:blank") { self.close(); } } </script> </head> <body> 正在跳转至Edge非IE模式... </body> </html>
原理:第一个meta标签触发microsoft-edge:协议唤起非IE窗口,第二个meta延迟跳转空白页,IE模式下空白页的self.close()不会被安全策略拦截,从而实现原窗口自动关闭。
方案2:A标签结合卸载事件(极简实现)
使用原生a标签跳转,同时利用页面卸载事件尝试关闭原窗口:
<html> <head> <script> window.onunload = function() { // 页面跳转时触发关闭 self.close(); } </script> </head> <body> <a href="microsoft-edge:https://www.google.com" rel="noopener noreferrer">跳转并关闭当前窗口</a> </body> </html>
注意:部分IE模式环境可能因安全策略限制self.close(),此时方案1的兼容性更可靠。
核心要点
- Edge IE模式下直接调用
window.close()会被安全拦截,必须通过页面跳转间接触发关闭。 - 若严格要求不调用window对象实现跳转,优先选择meta标签方案,完全依赖HTML原生属性完成唤起操作。
内容的提问来源于stack exchange,提问作者Unkownnnn
相关产品推荐
相关产品推荐

