簡體   English   中英

以管理員身份運行Internet Explorer 11時的不同window.open(…)行為

[英]Different window.open(…) behaviour when running Internet Explorer 11 as Administrator

以管理員身份運行Internet Explorer時,我對window.open()的調用看到了不同的行為。 我無法在jsfiddle / codepen等經過包裝的iframe環境中重現它,但我會盡力在此解釋問題。

在IE(不是以管理員身份運行)中,當我按下按鈕“ Empty”時,它將調用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>

window.open()的行為取決於幾件事,尤其是在Internet Explorer中。

由於您提供的是寬度/高度參數,因此瀏覽器應將您的新窗口作為彈出窗口打開(如果您已設置允許該設置)-如果刪除了寬度/高度,瀏覽器通常會在新選項卡中打開。

由於您的窗口名已被重新使用,並且不包含空格或連字符,因此瀏覽器應為兩者重新使用相同的窗口實例。 (如果您有空格或連字符,IE將會阻塞並且無法打開彈出窗口(已知的IE錯誤))。

“ TESTWINDOW”可能對此具有足夠的唯一性,但也請注意IE瀏覽器存在一個錯誤:如果您有另一個試圖調用window.open()的站點,並且它們使用與您/您的站點相同的窗口名稱,瀏覽器將重新使用該彈出窗口。 IE不能正確地將它們命名為域(已知錯誤)。

現在,在某一時刻(IE7 / 8?),Microsoft更改了一些有關啟動位置為“”(空字符串)和/或“ about:blank”或“ javascript :;”的窗口的行為。 或“ javascript:void;” 等等,以使它們在與打開它們的域相同的級別上不受信任。 您可能遇到與此有關的問題。 (如果您使用2個不同的但“真實”的URL,我會很好奇行為是否很好奇)。

由於新的彈出窗口是一個命名窗口,因此如果iframe或其父級的名稱為“ TESTWINDOW”,您也會得到一些奇怪的結果。

最后,您指出根據登錄的用戶會得到不同的結果。 由於IE中的設置是針對每個用戶的,因此您很可能會看到不同的設置在起作用。 例如,您的個人資料之一在兼容模式列表中是否具有您的域(或本地主機)? 還是您的個人資料之一具有不同的彈出窗口阻止規則或隱私設置?

嘗試另一種方法,使用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");

有很多方法,例如:提示,確認,登錄,成功,...

試試吧 :)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM