2017-07-15 56 views
0

在Chrome擴展中,在executeScript函數我點擊按鈕,這個按鈕渲染與ajax的內容,我想等內容加載,然後點擊另一個按鈕: 在background.js腳本我有:鉻擴展執行腳本等待阿賈克斯響應完成

chrome.tabs.query({active: true, currentWindow: true}, function (tabs) { 
    chrome.tabs.update(tabs[0].id, {url: tabs[0].url}, function() { 
     chrome.tabs.executeScript({ 
      file: "scriptInjection.js" 
     }, function (output) { 
      if (output == 'test1') { 
       sendData (output); 
       //clearStorage(); 
      } else if (output == 'test2') { 
       sendData (output); 
       clearStorage(); 
      } 
     }); 
    }); 
}); 

我嘗試了很多東西在scriptInjection.js爲exmple我創建了一個暫停功能是這樣的: 在scriptInjection.js文件我有:

function pause(milliseconds) { 
    let dt = new Date(); 
    while ((new Date()) - dt <= milliseconds) { 
    } 
} 

if (document.URL == "...") { 
    all = document.querySelectorAll('span.fc-title'); 

    for (let i = 0; i < all.length; i++) { 
     if (all[i].innerText == 'company') { 
      all[i].click(); 
      var result = true; 
      break; 
     } 
    } 
    if (result === true) { 
     pause(2000); 
     reserve(); 
     output = 'test1'; 
    } else { 
     document.querySelector("#calendar > div.fc-toolbar > div.fc-right > div > button.fc-next-button.fc-button.fc-state-default.fc-corner-right > span").click(); 
     all = document.querySelectorAll('span.fc-title'); 

     for (let i = 0; i < all.length; i++) { 
      if (all[i].innerText == 'company') { 
       all[i].click(); 
       var result = true; 
       break; 
      } 
     } 
     if (result === true) {    
      pause(2000); 
      reserve(); 
      output = 'test1'; 
     } 
    } 
} 

但以這種方式,腳本劑量不會等到ajax內容加載,我使用setInterval保留功能,但它仍然無法工作。 我使用MutationObserver在scriptInjection.js文件中像這樣在scriptInjection.js的起點,但它沒有作用:

 var observer = new MutationObserver(function() { 
     reserve(); 
     }); 
     observer.observe(document.documentElement, {attributes: true, childList: true, characterData: true}); 

和儲備功能:

function reserve(){ 
       let Shifts = document.getElementsByName("shifts"); 
       if (Shifts.length !== 0) { 
        for (let i = 0; i < Shifts.length; i++) { 
         Shifts[i].click(); 
         break; 
        } 
        document.querySelector("#Btn").click(); 
       } 

} 

我看到這個鏈接使用突變觀察員「fjaguero.com/blog/using-mutationobservers-to-build-a-simple-extension/」 但我不知道在哪裏放置突變觀察者Chrome擴展程序我應該使用它的內容腳本或執行腳本文件?

回答

0

我不會從內容腳本中使用executeScript功能。另外,始終更喜歡在內容和後臺腳本之間使用the communication

+0

TNX對GitHub上的幫助和回答這個問題,我使用chrome.tabs.query在background.js文件和setInterval的函數,該函數的功能,例如運行在30秒排在刷新頁面,然後點擊按鈕和...但我不知道如何刷新內容腳本文件中的頁面,所以我使用executeScript功能,問題是如何等待腳本點擊後加載ajax的內容按鈕 –

+0

感謝@fjaguero,通過在內容腳本中使用突變觀測器設計和消除EXCUTE腳本函數解決的緣由叫回調肯定執行腳本和變異觀察員後,問題關閉 –

+0

僅供參考,[這](https://github.com/fjaguero/twitter-answers-counter/issues/1)是我用突變觀察者的例子發佈了另一個擴展版本的地方 – fjaguero