当以管理员身份运行Internet Explorer时,我看到了对window.open()的调用的不同行为。我无法在jsfiddle / codepen等sanboxed iframe环境中重现它,但我会尽力在这里解释这个问题。
在IE中,没有以管理员身份运行,当我按下“清空”按钮时,它会调用window.open(“”,windowname,...)并出现一个新的空白窗口。接下来我按下“Full”按钮,它会调用window.open(“http://www.google.com”,windowname,..),旧的空白窗口设置为Google。
在IE中,以管理员身份运行时,不会覆盖初始空白窗口。而是在空白窗口旁边显示一个带有Google的新窗口。
我在下面提供了我的测试代码。我不确定它在iframe中的事实是否相关,但我包括它以防万一
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<iframe src="http://127.0.0.1:8888/">
</iframe>
</body>
</html>
<!DOCTYPE html>
<html>
<head>
<script type="text/javascript">
var windowname = "TESTWINDOW";
var features = "menubar=no, location=no, resizable=yes, status=yes, width=500, height=500";
function doEmpty(e) {
window.open("", windowname, features);
}
function doFull(e) {
window.open("http://www.google.com", windowname, features);
}
</script>
<style>
body {
width: 1000px;
height: 1000px;
}
</style>
</head>
<body>
<button onclick="doEmpty()">Empty</button>
<button onclick="doFull()">Full</button>
</body>
</html>
答案 0 :(得分:2)
window.open()的行为取决于一些事情,特别是在Internet Explorer中。
由于您提供宽度/高度参数,浏览器应该以弹出窗口打开您的新窗口(如果您已将设置设置为允许) - 如果您删除宽度/高度,浏览器通常会打开改为使用新标签。
由于您的windowname被重用,并且不包含空格或超量,浏览器应该为两者重用相同的窗口实例。 (如果你有空格或连字符IE会窒息而不打开弹出窗口(已知IE漏洞))。
&#34; TESTWINDOW&#34;这可能是足够独特的,但也要注意IE有一个错误,如果你有另一个网站试图调用window.open()并且他们使用与你/你的网站相同的窗口名称,浏览器将重新使用那个弹出窗口。 IE没有正确&#34;命名空间&#34;他们到域名(已知的bug)。
现在有一点(IE7 / 8?)微软改变了一些行为,围绕启动一个位置为&#34;&#34; (空字符串),和/或&#34; about:blank&#34;,或&#34; javascript:;&#34;或&#34; javascript:void;&#34;等等,使得它们不像打开它们的域那样受信任。您可能遇到与此相关的问题。 (如果您使用2个不同的,但是&#34;真实的&#34; URL,如果行为更好,我会很好奇。)
由于新的弹出窗口是一个命名窗口,如果iframe或它的父级名称为&#34; TESTWINDOW&#34;你也会得到一些奇怪的结果。
最后,您表示根据登录用户获得的结果会有所不同。由于IE中的设置是每个用户,因此您很可能会看到不同的设置。例如您的某个配置文件是否在兼容模式列表中拥有您的域(或localhost)?或者您的某个配置文件是否有不同的弹出窗口阻止规则或隐私设置?
答案 1 :(得分:0)
尝试另一种方式,无需使用window.open()
有Alertify JS个好消息库。
只包含js和css文件:
<script src="PATH_TO_FILE/alertify.min.js"></script>
<link rel="stylesheet" href="PATH_TO_FILE/alertify.css" />
<link rel="stylesheet" href="PATH_TO_FILE/alertify.default.css" />
这是一个例子:
alertify.alert("Message");
有很多方法可以:提示,限制,记录,成功......
尝试一下:)