document.readyState не работает в Firefox и Chrome

В моем приложении я вызываю метод каждые 1000 мс для проверки документа readyState. Ниже приведен код, который я использую,

var success=setInterval(""CheckState()"",1000);

function CheckState(){

if($get('businessDownl').document.readyState=="interactive" || 
      $get('businessDownl').document.readyState=="complete"){
           alert("Great");
           clearInterval(success);
  } 
}

Этот код прекрасно работает в браузере IE. Но происходит сбой в браузерах Firefox и Chrome. Я пытался с помощью $get('businessDownl').readyState также, это печать как неопределенная. Кто-нибудь может сказать мне, как использовать readyState для FF и chrome в вышеупомянутом сценарии?

2 ответа

Решение

ПРИМЕЧАНИЕ. Чтобы получить доступ к документу iframe и, следовательно, readyStateВы должны иметь доступ к домену в iframe (независимо от использования jQuery).
Для получения дополнительной информации, посмотрите здесь.


Вы можете сделать это с помощью iframe contentWindow свойство (не требуется jQuery).
Обратите внимание, что для доступа к iframe document, вы должны сначала добавить элемент в DOM (например, используя window.document.appendChild()).

Образец кода:

var businessDownl = document.createElement('iframe');
document.body.appendChild(businessDownl);
...
var state = businessDownl.contentWindow.document.readyState;

Смотрите также это короткое демо.
[Проверено на последних версиях Firefox и Chrome.]

(Обратите внимание, что, поскольку iframe загружается быстро, иногда вы видите только "завершено", иногда "загружается" и "завершено" - однажды мне даже повезло увидеть "неинициализированный" тоже:D).

Если вы просто хотите подождать, пока документ не будет готов, нет необходимости продолжать проверку - вы можете прослушать событие:

var whenReady = function(callback) {
  if (document.readyState === 'complete') callback(); // check not already loaded prior to this function being called
  else if (document.addEventListener) document.addEventListener('DOMContentLoaded', callback); // for standards compliant browsers (including IE 9+)
  else if (document.attachEvent) document.attachEvent('onreadystatechange', callback); // for IE 8
};

whenReady(alert('loaded'));

Единственным недостатком этого метода является то, что он поддерживает только IE 8 и более поздние версии. Такие библиотеки, как JQuery, предлагают лучшую поддержку устаревших браузеров и более чистый синтаксис:

$(function() {
  // anything here will execute once the dom is ready
});
Другие вопросы по тегам