我在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
有什么建议吗?
谢谢。
答案 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>
在第一行中,第一个参数必须是相同的域,或者将其空白,否则您将无法打开打开的窗口以将其关闭。