2017-07-15 54 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