window.close不适用于IE 11中打开的窗口

时间:2019-02-05 21:30:38

标签: javascript html internet-explorer-11 window.open

我在IE 11中遇到问题,当我通过win1 = window.open(...)打开一个新窗口时,无法通过win1.close()再次关闭它。

下面,从主窗口注销后,在IE 11下无法打开在OpenWindowWithGet()下打开的子窗口。 与Google Chrome完美兼容。

[更新]:在开发人员工具下的IE 11控制台上执行此操作时,我可以使用window.open(使用分配的变量)打开窗口,并使用window.close()将其关闭(如var1.close ()]。 除了可能有助于分析此异常的东西之外。

<html>
<script type="text/javascript">
var win1; 

function OpenWindowWithGet(urllink, windowoption, name){

var form = document.createElement("form");
form.method = "GET";
form.action = urllink;
form.target = name;

var input = document.createElement("input");
input.type = "hidden";
input.name = "OAP_Id";
input.value = OAP_Id;
form.appendChild(input);

document.body.appendChild(form);
win1 = window.open(urllink, "Manual", windowoption);
form.submit();}

function OAPLogoutClick(){ 
     disconnectFromNodeServer();
     win1.close();

}


MyManual()函数内部的OpenWindowWithGet()的HTML代码-

                   <h:panelGrid  id="manual" columns="2" cellpadding="2px" cellspacing="0" style="display: inline-block;">
                    <h:panelGroup>
                       <a onclick="return myManual();" target="_blank" style="width: 40px; display: inline-block;  position: relative; top: 2px; color: #000000">Manual</a>
                    </h:panelGroup>
                    <h:outputLabel id="manualSeparator" value=" | " style="color: #000000; display: inline-block;"/>
                </h:panelGrid>

OAPLogout()的HTML代码-

                                <div class="oapadding5" onclick="hideGroupedInfo();OAPLogoutClick();stopEventPropagation(event);"  onmouseover="onRowMouseOver(this);" onmouseout="onRowMouseOut(this);" style="display: #{oASession.m_bShowLogout eq 'true'? '':'none'}">
                                    <h:commandLink id="logoutLink2" styleClass="oatextpaddingleft" style="color: #{oAThemeBean.m_objCurrentThemeInfo.m_strTextFontColor};" value="#{OMNIGEN.LOGOUT}" onclick="return false;">
                                    </h:commandLink>
                                </div>

相关问题,但提供的解决方案没有帮助。 questions/710756

有什么建议吗?

谢谢。

2 个答案:

答案 0 :(得分:0)

我做了一些测试,得出的答案是:这不是你的错。

问题不是围绕win1.close来解决的,因为win1是未定义的,因为IE很特殊。如果您在IE 11中运行此代码:

const win = window.open("https://www.google.com/")
console.log(win)

它记录:null。这是因为由于某些原因,window.open返回null而不是对新窗口的引用。 This SO question已解决您的问题。最受支持的答案是,从本地文件托管的网站打开一个窗口会启用此行为,如果托管网站,则其行为应与其他浏览器相同。

答案 1 :(得分:0)

如果您的 urllink 指向另一个域,则出于安全原因,您将不会在IE上获得window对象(我可能错了,但我想它与XSS问题有关)。

如果没有;尝试下面的代码进行演示;

<!DOCTYPE html>
<html>
    <head></head>
    <body>
        <button onclick="openWin()">Open "myWindow"</button>
        <button onclick="closeWin()">Close "myWindow"</button>

        <script>
            var myWindow;

            function openWin() {
                var params = "width=200, height=100";
                myWindow = window.open("**here is have to be the same domain or leave it blank", "myWindow" /*, params */);
                console.log(myWindow);
                myWindow.document.write("<p>This is 'myWindow'</p>");
            }

            function closeWin() {
              myWindow.close();
            }
        </script>
    </body>
</html>

在第一行中,第一个参数必须是相同的域,或者将其空白,否则您将无法打开打开的窗口以将其关闭。