在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
尝试了很多事情,例如我创建一个像这样的暂停函数:
在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作为保留功能,但它仍无法正常工作。
我在scriptInjection.js
文件的scriptInjection.js
文件中使用MutationObserver,但这不起作用:
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扩展中将变异观察者放在哪里?