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

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. 我写了一个简单的观察器,它每 100 毫秒查询一次弹出窗口并转储它的属性。这就是我发现有人将 body.style.borderStyle 设置为“inset”并在几秒钟后设置为开始(不是 styleName)的方式。
3. 审查了所有的 JavaScript 代码,没有发现任何关于 inset 或 outset 值的引用。我有 99% 的把握,这不是我们的代码更改了边界。也许这是某种 IE 安全策略作为对我们某些行为的反应。
任何想法——什么会导致 IE8 中弹出边框的这种变化?

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

4

3 回答 3

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 设置“允许脚本启动的窗口没有大小或位置限制”,默认情况下即使对于受信任的区域也有值“禁用”

于 2009-04-28T11:09:19.500 回答
0

也许 IE 开发团队已经决定变得优秀,让那些想要使用弹出窗口的人过得艰难 :)

于 2009-04-28T11:15:39.123 回答
0

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

这就是我避免使用 IE 的原因。还是那么坑。我不在乎 Tweakui 是否不受 MS 支持。为什么 MS 不完全重写 IE?

于 2009-06-22T19:10:08.617 回答