如何随着DOM的变化来刷新Chrome扩展的内容脚本



我很难从content_script中重新运行一些简单的JS以进行Chrome扩展。这基本上是我设置的内容。以下代码有效,但只有一次:

清单

{
  "content_scripts": [ {
    "matches": ["https://www.amazon.com/*"],
    "js": ["./content_scraper.js", "./main.js"],
    "run_at": "document_end"
  } ],
  "permissions": ["tabs","webNavigation"]
}

content_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;
    }
  }
);

main.js

 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后起作用。我已经尝试了domnodeinsert的事件并再次读取document.readyState启动脚本,但是我似乎无法从content_scripts访问dataupdater函数。

每当更新DOM时,我只是尝试运行content_scraper.js(属于content_scripts)。感谢您的帮助!

您需要查找MutationObserver并在文档主体的subtree上观察:

const observer = new MutationObserver(function(mutations) {
...   
});
observer.observe(document.body, { subtree: true });

请参阅参考:https://developer.mozilla.org/cs/docs/web/api/munnobserver

最新更新