Javascript 如何在DOM更改时刷新chrome扩展的内容脚本

Javascript 如何在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":

我很难从chrome扩展的content_脚本中重新运行一些简单的JS。这是我的基本设置。以下代码可以工作,但只能工作一次:

manifest.json

{
  "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。