2009-04-24 100 views
0

我們發現了IE8中彈出窗口的奇怪行爲。在IE7和IE6我們的彈出如下:
alt text http://img145.imageshack.us/img145/2318/normall.gif
但在IE8它具有奇特的邊界,「閃爍」 5-6次,看起來像這樣:這是用來顯示這個彈出
alt text http://img16.imageshack.us/img16/4677/bugo.gif
代碼:ie8中的彈出窗口閃爍

Browser.prototype.showPopup = function(someHtml) { 

    ... 

    var popup = doc.parentWindow.createPopup(); 

    for(var n = 0; n < doc.styleSheets.length; n++) { 
    popup.document.createStyleSheet(document.styleSheets[n].href); 
    } 

    popup.document.body.innerHTML = "<div style=\"width:100%;height:100%;overflow:auto\">" + someHtml + "</div>"; 

    popup.document.parentWindow.Form = Form; 
    popup.document.attachEvent("onselectstart", IEOnSelectStart); 
    popup.document.attachEvent("oncontextmenu", IEOnContextMenu); 

    ... 

    popup.show(x, y, width, height, ctl); 
    doc.popup = popup; 
} 

我研究什麼:
1.我曾試圖訂閱的onpropertychanged事件。但它不會在邊框更改時觸發,而如果我嘗試從代碼更改此屬性,則它可以正常工作。
2.我寫了一個簡單的觀察器,每100ms查詢彈出並轉儲它的屬性。這就是我發現有人將body.style.borderStyle設置爲「插入」,並在幾秒鐘後開始(不是一個styleName)。
3.審查了所有的JavaScript代碼,沒有找到任何關於插入或開始值的參考。 我99%確定這不是我們的代碼改變邊界。也許這是某種IE安全策略,作爲對我們某些行爲的反應。
任何想法 - 什麼可能導致IE8彈出邊框的這種變化?

P.S.此外,我無法在我們的環境之外重現此問題。
P.P.S.位於信任區的網站
P.P.P.S. IE模式是怪癖 P.P.P.P.S.同一頁面上的某些彈出窗口可以正常工作,但是我找不到可能導致此類行爲的區別。

回答

0

我轉載的問題與此代碼:

<script type="text/javascript" > 
    document.showInnerPopup = function(){ 
     alert("Inner popup"); 
    } 

    function btnOnClick(){ 
     var popup = document.parentWindow.createPopup(); 
     popup.document.body.innerHTML = "<div style=\"border: 1px solid red;width: 100%; height:100%\" id=\"popupDiv\" onclick=\"javascript:document.showInnerPopup(this,event)\">Click to show another popup</div>"; 
     popup.document.showInnerPopup = function(obj, evt) { 
      var doc = evt.srcElement.ownerDocument; 

      var popup = doc.parentWindow.createPopup(); 
      popup.document.body.innerHTML = "<div style=\"border: 1px solid green;width: 100%; height:100%\">Nested popup</div>" 
      popup.show(10, -20, 150, 150, doc.body); 
     } 

     popup.show(10, -20, 100, 100, document.getElementById("btn")); 
     document.btn = document.getElementById("btn"); 
     document.popup = popup; 
    } 
</script> 
<input type="button" value="Show Popup" onclick="btnOnClick()" id="btn" /> 

此行爲是因爲IE設置「允許腳本初始化的窗口,沒有大小和位置限制」,這被默認爲可信任的值爲「禁用」,甚至區

0

也許IE開發團隊已經決定成爲一個真正讓生活辛苦,誰想要使用彈出窗口:)

+0

IE開發團隊決定讓那些想要構建豐富界面的人努力工作。 供參考:彈出窗口不僅用於注入和攻擊:-) – 2009-04-28 12:04:37

0

我得到一種閃爍的,每當我在IE8中使用谷歌,並把鼠標放在搜索輸入字段whi ch讓我無法打字,直到我將鼠標移開。但我的原因是Tweakui的'激活鼠標'X鼠標功能。然而,隨着搜索功能的停用以及搜索功能的出現,仍然存在一個閃爍的Google搜索。

這就是爲什麼我要避免IE。它仍然是越野車。我不在乎MS不支持tweakui。爲什麼MS不完全重寫IE?