2009-04-24 157 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?