Простой вопрос (как указано в заголовке):
Действителен ли jQuery.ready()
при использовании на iframe.contentDocument
?
И сложный вопрос:
Мне нужно подключить событие keyup к полю ввода в CMS, поэтому я не имею никакого контроля над HTML, только сценарий.
Входные данные находятся внутри iframe, который вложен в другой iframe, поэтому в нем есть верхнее окно (окно браузера), iframe (давайте назовем его iframe1) и еще один iframe (давайте назовем этот iframe2). Сценарий и jQuery находятся в разделе <head>
верхнего окна.
Я на самом деле не люблю setTimeout/setInterval
, поэтому моей первоначальной мыслью было использовать jQuery.ready()
вот так (я пропустил код, выбирающий фреймы):
$(document).ready(function(){
$(iframe1.contentDocument).ready(function(){
$(iframe2.contentDocument).ready(function(){
$("input").keyup(function(){ /* Do stuff */ });
});
});
});
Проблема в том, что к моменту запуска .ready()
iframe1 я могу проверить iframe1.contentDocument.body.innerHTML
, и он оказывается пустой строкой. Не то, что можно было бы ожидать. В результате этого код не может связать событие keyup.
В случае, если кто-то думает «Используете ли вы правильный контекст селектора?»: Да, я выбираю элементы iframe в правильных документах (хотя фрагмент кода выше может не полностью подтвердить это, так как я хотел сделать его простым ). Также нет проблем с политикой происхождения - все iframes и родительское окно находятся в одном домене.
Использование $(window).load()
, кажется, работает, но ожидание загрузки изображений и т. Д. Требует слишком много времени ожидания, что будет неприемлемо для приложения.
Можно ли достичь jQuery.ready()
функциональности, которая будет работать на фреймах без использования jQuery.load()
?