jQuery диалог iframe загружается один раз в IE и два раза в других браузерах? - PullRequest
5 голосов
/ 02 ноября 2009

У меня есть диалоговое окно jQuery, содержимое которого определяется iframe. Пока не отобразится диалоговое окно, содержимое этого iframe невидимо. В IE выполняется это содержимое и связанный с ним javascript, поэтому при отображении диалогового окна становится очевидным, что javascript уже завершил всю свою загрузочную работу. Но в браузерах, отличных от IE, таких как Firefox и Chrome, этот iframe снова выполняет свой javascript до того, как диалоговое окно станет видимым, но затем, по-видимому, re - выполняет его, когда отображается диалоговое окно.

Поскольку это довольно дорогой iframe для создания (большое количество javascript выполняется с помощью вызовов ajax и все такое), я не хочу, чтобы браузер оплачивал стоимость его инициализации дважды. На самом деле, я могу сказать, что хочу отложить инициализацию до тех пор, пока диалог фактически не будет запущен. Но независимо от того, будет ли он инициализирован до того, как будет запущен, а затем сохранит эту инициализацию (как это делает IE), или он просто откладывает инициализацию до тех пор, пока диалоговое окно не станет видимым, я мог бы согласиться на любое из них.

Я не могу согласиться с тем, что я вижу сейчас, когда браузеры, отличные от IE, инициализируются дважды, при этом первый раз является полной тратой, поскольку они повторно инициализируются при появлении диалогового окна.

Страница, на которую я ссылаюсь: http://openidux.dotnetopenauth.net/. Вы можете воспроизвести поведение, щелкнув ссылку «Вход» в правом верхнем углу.

Спасибо.

Ответы [ 3 ]

7 голосов
/ 13 ноября 2009

Я закончил тем, что изначально установил для свойства iframe.src значение about: blank и установил источник, только когда диалоговое окно действительно всплыло. И затем, чтобы избежать его перезагрузки, когда диалоговое окно скрывается (глупо, я знаю), я установил его обратно примерно: blank.

$(document).ready(function() {
    $("#loginDialog").dialog({
        close: function(event, ui) {
            // Clear the URL so Chrome/Firefox don't refresh the iframe when it's hidden.
            iframe.src = "about:blank";
        },
        open: function(event, ui) {
            iframe.src = loginContent;
        },
    });
});
2 голосов
/ 27 августа 2011

У меня была такая же проблема только сейчас. Я обнаружил, что проблема связана с параметром анимации при открытии диалогового окна, которое, похоже, мешает работе iframe. Просто удалите настройки «шоу» из вашего JavaScript.

изменить это

$("#blah").dialog({ title: 'Dialog Title', show: 'slide', .... }); 

к этому

$("#blah").dialog({ title: 'Dialog Title', ... });
0 голосов
/ 02 ноября 2009

Я не очень подробно изучил ссылку, но какое событие onload вы используете для инициализации IFRame? Может ли это быть проблемой onDomLoad / onLoad?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...