Javascript 如何在DOM更改时刷新chrome扩展的内容脚本
我很难从chrome扩展的content_脚本中重新运行一些简单的JS。这是我的基本设置。以下代码可以工作,但只能工作一次: manifest.jsonJavascript 如何在DOM更改时刷新chrome扩展的内容脚本,javascript,google-chrome,Javascript,Google Chrome,我很难从chrome扩展的content_脚本中重新运行一些简单的JS。这是我的基本设置。以下代码可以工作,但只能工作一次: manifest.json { "content_scripts": [ { "matches": ["https://www.amazon.com/*"], "js": ["./content_scraper.js", "./main.js"], "run_at": "document_end" } ], "permissions":
{
"content_scripts": [ {
"matches": ["https://www.amazon.com/*"],
"js": ["./content_scraper.js", "./main.js"],
"run_at": "document_end"
} ],
"permissions": ["tabs","webNavigation"]
}
content\u scraper.js
function dataUpdater() {
// this function scrapes the page and updates the data var
}
chrome.runtime.onMessage.addListener(
function(message, sender, sendResponse) {
switch(message.type) {
case "getItems":
sendResponse(data)
break;
}
}
);
function getItemsData() {
chrome.tabs.query({active: true, currentWindow: true}, function(tabs) {
chrome.tabs.sendMessage(tabs[0].id, {type: "getItems"}, function(resp) {
resp.map(item => {
// do some things
}
})
})
}
document.addEventListener("DOMContentLoaded", getItemsData)
main.js
function dataUpdater() {
// this function scrapes the page and updates the data var
}
chrome.runtime.onMessage.addListener(
function(message, sender, sendResponse) {
switch(message.type) {
case "getItems":
sendResponse(data)
break;
}
}
);
function getItemsData() {
chrome.tabs.query({active: true, currentWindow: true}, function(tabs) {
chrome.tabs.sendMessage(tabs[0].id, {type: "getItems"}, function(resp) {
resp.map(item => {
// do some things
}
})
})
}
document.addEventListener("DOMContentLoaded", getItemsData)
因此,上面的代码在加载DOMContent后工作。我已经尝试过使用DOMNodeInserted事件并读取document.readyState
以再次启动脚本,但我似乎无法从content\u脚本访问dataUpdater函数
我只是尝试在DOM更新时运行content_scraper.js(位于content_脚本中)。谢谢你的帮助 您需要查找
MutationObserver
并在文档体的子树上进行观察,如下所示:
const observer = new MutationObserver(function(mutations) {
...
});
observer.observe(document.body, { subtree: true });
参见参考资料:您需要在文档体的子树上查找MutationObserver
并观察,如下所示:
const observer = new MutationObserver(function(mutations) {
...
});
observer.observe(document.body, { subtree: true });
请参阅参考:这将返回一个错误>未捕获类型错误:未能在“MutationObserver”上执行“observe”:选项对象必须设置至少一个“attributes”、“characterData”选项,或将“childList”设置为true。这将返回一个错误>未捕获的TypeError:未能在“MutationObserver”上执行“observe”:options对象必须将“attributes”、“characterData”或“childList”中的至少一个设置为true。