Определение состояния готовности DOM в iFrame (jQuery) - PullRequest
1 голос
/ 01 февраля 2010

У меня есть скрипт, запускаемый в документе, который может быть или не быть вложенным в iframe. Я разобрался с проблемой обнаружения вложенных, но не могу понять, как определить состояние готовности DOM, когда это iframe.

Вот что у меня уже есть:

if (window.self !== window.top) {
    // is nested
    // DOM ready test here
        // execute code here
} else {
    // is not nested
    $(document).ready(function() {
        // execute code here
    });
}

Я уже прочитал этот пост , но не вижу ответа на свой конкретный вопрос. Возможно, я неправильно понимаю решения, поэтому поправьте меня.


EDIT: Кажется, это проблема Fancybox. Этот код:

alert(document.getElementById('username').className);
document.getElementById('username').focus();

Я вижу предупреждение с правильным значением, но элемент формы не получает фокус. Это говорит мне, что это не проблема с определением состояния готовности DOM. Оригинальный скрипт, который я пытался использовать, был таким:

$(document).ready(function() {
    $('input.focus:last').focus();
});

РЕДАКТИРОВАТЬ 2 / РЕШЕНИЕ: Мне пришлось прибегнуть к конкретному решению Fancybox, потому что, похоже, это особая проблема Fancybox. Я добавил эту строку в конфигурацию для этих форм Fancybox iframed:

'onComplete':function(){$('input.focus:last').focus();}

1 Ответ

4 голосов
/ 02 февраля 2010

Вы можете разместить тег SCRIPT в конце тега iframe BODY.
Затем добавьте туда свой код, он будет выполнен при загрузке тела iframe.

Вы можете запустить локальный JS-код iframe или вызвать объект в родительском объекте, например:

<body>
  ...
  <script>
    parent.myObj.iframeLoaded(document.body);
  </script>
</body>

По моему опыту, событие onload в IE не является надежным.
то есть: он не будет ждать загрузки JS внутри iframe перед запуском.

...