всплывающее окно мигает в ie8 - PullRequest
0 голосов
/ 25 апреля 2009

Мы обнаружили странное поведение всплывающих окон в IE8. В IE7 и IE6 наше всплывающее окно выглядит так:
альтернативный текст http://img145.imageshack.us/img145/2318/normall.gif
Но в IE8 он имеет странную границу, которая "мигает" 5-6 раз и выглядит так:
альтернативный текст 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» и через несколько секунд в «outset» (не styleName).
3. Пересмотрел весь код JavaScript и не нашел ссылок на значения inset или outset. Я на 99% уверен, что это не наш код, меняет границы. Может быть, это какая-то политика безопасности IE как реакция на некоторые наши действия.
Есть идеи - что может вызвать такие изменения всплывающих окон в IE8?

P.S. Также я не могу воспроизвести эту проблему за пределами нашей среды.
P.P.S. Сайт в доверенной зоне
P.P.P.S. IE режим причуды P.P.P.P.S. Некоторые всплывающие окна на одной странице работают нормально, но я не могу найти разницу между ними, которая может привести к такому поведению.

Ответы [ 3 ]

0 голосов
/ 28 апреля 2009

Возможно, команда разработчиков IE решила стать хорошим и усложнить жизнь тем, кто хочет использовать всплывающие окна:)

0 голосов
/ 22 июня 2009

Когда я пользуюсь Google в IE8, у меня появляется какое-то мигание, и я нахожу курсор мыши на поле ввода поиска, которое не позволяет мне печатать, пока я не уберу мышь. Но моей причиной была функция X-Mouse в Tweakui - «активация следует за мышью». Тем не менее, если эта функция отключена и находится над поиском, по-прежнему отображается «Поиск Google», который мигает.

Вот почему я избегаю IE. Это все еще так глючит. Мне все равно, если твикуи не поддерживается MS. Почему MS просто не переписывает IE вообще?

0 голосов
/ 28 апреля 2009

Я воспроизвел проблему с этим кодом:

<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 «Разрешить инициируемые сценарием окна без ограничений размера или положения», которая по умолчанию имеет значение «Отключить» даже для доверенной зоны

...