在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擴展程序我應該使用它的內容腳本或執行腳本文件?
TNX對GitHub上的幫助和回答這個問題,我使用chrome.tabs.query在background.js文件和setInterval的函數,該函數的功能,例如運行在30秒排在刷新頁面,然後點擊按鈕和...但我不知道如何刷新內容腳本文件中的頁面,所以我使用executeScript功能,問題是如何等待腳本點擊後加載ajax的內容按鈕 –
感謝@fjaguero,通過在內容腳本中使用突變觀測器設計和消除EXCUTE腳本函數解決的緣由叫回調肯定執行腳本和變異觀察員後,問題關閉 –
僅供參考,[這](https://github.com/fjaguero/twitter-answers-counter/issues/1)是我用突變觀察者的例子發佈了另一個擴展版本的地方 – fjaguero