Загрузите набор URL-адресов с document.location.href, а затем выполните JS, только если страница была загружена - PullRequest
2 голосов
/ 03 ноября 2011

Я делаю расширения FireFox. У меня есть массив URL. То, что я хочу: перенаправить страницу с document.location.href для всех URL-адресов, которые у меня есть, а затем, с помощью имеющегося у меня XPath, подсчитать количество элементов на этой странице.

Проблема в том, что мне нужно дождаться окончания загрузки страницы, прежде чем выполнить метод count с XPath. Это мой код:

var actualResult = 0;
actualResult = content.document.evaluate('count('+taskModeler.ui.getStatus()+')', content.document, null, XPathResult.NUMBER_TYPE, null).numberValue; 
for(var i=0; i<taskModeler.ui.getPageContent().length;i++) {
    content.document.location.href = taskModeler.ui.getPageContent()[i].getAttribute("href");
   //only if the page was loaded execute the next line

   actualResult+=content.document.evaluate('count('+taskModeler.ui.getStatus()+')',
       content.document, null, XPathResult.NUMBER_TYPE, null).numberValue; 
}

getPageContent() возвращает массив, содержащий набор URL . Для каждого из этих URL я должен загрузить страницу, чтобы получить доступ к документу, а затем подсчитать вхождения, которые возвращают XPath. Но если страница не была загружена, метод count не работает, потому что возвращает результаты фактической страницы, а не страницы, которая была загружена в content.document.location.

Как я могу это сделать?

1 Ответ

1 голос
/ 28 декабря 2011

вам нужно использовать обработчик прогресса читать это

const STATE_START = Components.interfaces.nsIWebProgressListener.STATE_START;  
const STATE_STOP = Components.interfaces.nsIWebProgressListener.STATE_STOP;  
  var myListener =  
 {  
 QueryInterface: function(aIID)  
 {  
  if (aIID.equals(Components.interfaces.nsIWebProgressListener) ||  
   aIID.equals(Components.interfaces.nsISupportsWeakReference) ||  
   aIID.equals(Components.interfaces.nsISupports))  
 return this;  
 throw Components.results.NS_NOINTERFACE;  
  },  

 onStateChange: function(aWebProgress, aRequest, aFlag, aStatus)  
 {  
 // If you use myListener for more than one tab/window, use  
 // aWebProgress.DOMWindow to obtain the tab/window which triggers the state change  
 f (aFlag & Components.interfaces.nsIWebProgressListener.STATE_IS_DOCUMENT) { 
 {  
     if(aFlag & STATE_STOP)  
 {  
   // This fires when the load page finishes  
 }  

 }  
     },  

 onLocationChange: function(aProgress, aRequest, aURI)  
  {  
  // This fires when the location bar changes; that is load event is confirmed  
  // or when the user switches tabs. If you use myListener for more than one tab/window,  
  // use aProgress.DOMWindow to obtain the tab/window which triggered the change.  
  },  

 // For definitions of the remaining functions see related documentation  
 onProgressChange: function(aWebProgress, aRequest, curSelf, maxSelf, curTot, maxTot) { },  
 onStatusChange: function(aWebProgress, aRequest, aStatus, aMessage) { },  
 onSecurityChange: function(aWebProgress, aRequest, aState) { }  
 }  

если тебе нужна дополнительная помощь, скажи мне.

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