以管理员身份运行Internet Explorer 11时的不同window.open(...)行为

时间:2015-10-07 21:19:46

标签: javascript html iframe internet-explorer-11

当以管理员身份运行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>

http://127.0.0.1:8888/处的来源

<!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>

2 个答案:

答案 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");

有很多方法可以:提示,限制,记录,成功......

尝试一下:)