弹出窗口在ie8中闪烁

时间:2009-04-24 20:53:22

标签: html internet-explorer-8 popup border

我们在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
用于显示此弹出窗口的代码:

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;
}

我研究的内容:
我曾尝试订阅onpropertychanged事件。但它在边框更改时不会触发,但如果我尝试从代码中更改此属性,则它可以正常工作 2.我编写了一个简单的观察程序,每个100ms查询弹出并转储它的属性。这就是我发现有人将body.style.borderStyle设置为“inset”并在几秒钟之后开始(不是styleName)。
3.查看了所有JavaScript代码,但没有找到有关插入或开始值的任何参考。 我99%肯定这不是我们的代码改变边界。也许是某种IE安全策略是对我们某些行为的反应 任何想法 - 什么可能导致IE8中弹出边框的这种变化?

P.S。此外,我不能在我们的环境之外重现这个问题 P.P.S.站点在受信任区域中 P.P.P.S. IE模式很怪癖 P.P.P.P.S.同一页面上的一些弹出窗口工作正常,但我找不到它们之间可能导致这种行为的区别。

3 个答案:

答案 0 :(得分: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设置“允许脚本启动的窗口没有大小或位置限制”,默认值为“禁用”,即使对于受信任区域也是如此

答案 1 :(得分:0)

也许IE开发团队已经决定变得更好并且让那些想要使用弹出窗口的人过得更加努力:)

答案 2 :(得分:0)

每当我在IE8中使用Google并将鼠标放在搜索输入字段上时,我就会有点眨眼,这会阻止我输入,直到我将鼠标移开。但我的原因是Tweakui的'激活跟随鼠标'X-Mouse功能。然而,当该功能关闭并悬停在搜索上时,仍有一个“谷歌搜索”闪烁不断。

这就是我避免使用IE的原因。它仍然是如此的错误。我不在乎MS是否支持tweakui。为什么MS不能完全重写IE?