1

Тема: Ожидание загрузки страницы в imacros

function wR(){

    var i = 0, val_, r, sW = false;
    var mW = window.QueryInterface(Components.interfaces.nsIInterfaceRequestor)
        .getInterface(Components.interfaces.nsIWebNavigation)
        .QueryInterface(Components.interfaces.nsIDocShellTreeItem)
        .rootTreeItem
        .QueryInterface(Components.interfaces.nsIInterfaceRequestor)
        .getInterface(Components.interfaces.nsIDOMWindow);
    
    var newTabBrowser = mW.gBrowser.getBrowserForTab(mW.gBrowser.selectedTab);
    
    function ready(){
        sW = true;
        newTabBrowser.removeEventListener("DOMContentLoaded", ready, true);//Удаляем обработчик
    }
    
    newTabBrowser.addEventListener("DOMContentLoaded", ready, true);
    
        for(var i=0; i<30; i++){

                iimDisplay('Waiting for DOM loading... ' + i);
                
            if (sW) {iimDisplay('DOM ready! [' + i + " sec.]"); break;}
                iimPlayCode('WAIT SECONDS=1');
        }
}

wR(); // Ожидаем загрузки DOM

Скрипт ожидает загрузки DOM, после чего продолжает выполнение последующего кода. Максимальная задержка 30 секунд не оказывает влияния на работу самого браузера, так как выполняется в цикле посредством команды WAIT SECONDS imacros.

Поделиться

2

Re: Ожидание загрузки страницы в imacros

Отследить, если страница обновляется без перезагрузки

// Отслеживать переключение, загрузку, изменение текущей вкладки
var main = {
    // если текущая страница изменился( загрузка, переход по истории, тп.) ....
    onStateChange: function(aWebProgress, aRequest, aFlag, aStatus) {       
       if ( !aWebProgress.DOMWindow.document.location.protocol.startsWith("http") ) return; // стоп если внутренние страницы FF

       // если уже загруженная текущая страница
       if ( aFlag & Ci.nsIWebProgressListener.STATE_STOP ) {
            
            // aWebProgress.DOMWindow.close()    
            }    
    },
    
    // если текущий адрес изменился ....
    onLocationChange: function(aWebProgress, aRequest, aURI) {
       if ( aRequest ) return; // стоп если это не переключение на другую вкладку
       if ( !aURI.spec.startsWith("http") ) return; // стоп если внутренние страницы FF
       if ( aWebProgress.DOMWindow.document.readyState !== 'complete' ) return; // стоп если текущая страница еще не загружена

       // запуск кода или функции при переключение на другую вкладку
        if (window.content.document.location.host == "www.inoreader.com") {
          setTimeout (function() {
            var tags=window.content.document.getElementsByTagName('span');
            for (var i = 0; i < tags.length ; i++){
              tags[i].innerHTML=tags[i].innerHTML.replace(/.*\s\:\:\s/g,'');
            };
          },2500);
        };
    }
};
gBrowser.addProgressListener( main );
addDestructor(function() { gBrowser.removeProgressListener( main ) });

https://forum.mozilla-russia.org/viewto … pid=685151

Поделиться