Javascript 每当选项卡URL更改时,在$(document).ready(function(){})之后写入内容脚本的代码不会';不要注射。我怎样才能解决这个问题?

Javascript 每当选项卡URL更改时,在$(document).ready(function(){})之后写入内容脚本的代码不会';不要注射。我怎样才能解决这个问题?,javascript,jquery,html,ajax,google-chrome-extension,Javascript,Jquery,Html,Ajax,Google Chrome Extension,我为一个网站创建了一个chrome扩展,该网站使用ajax调用进行网页导航,因此每次都必须重新加载页面,才能注入脚本。为了避免这种情况,我使用了如下方法: chrome.tabs.onUpdated.addListener(function(tabId,changeInfo,tab) { if(changeInfo.url){ console.log("tab url changed"); chrome.tabs.executeScript(null, {file: "

我为一个网站创建了一个chrome扩展,该网站使用ajax调用进行网页导航,因此每次都必须重新加载页面,才能注入脚本。为了避免这种情况,我使用了如下方法:

chrome.tabs.onUpdated.addListener(function(tabId,changeInfo,tab) {
    if(changeInfo.url){
     console.log("tab url changed");
    chrome.tabs.executeScript(null, {file: "js/jquery-3.2.1.min.js"});
         chrome.tabs.executeScript(null, {file: "payload.js"});
        }

});
因此,每当我在网站页面之间导航时,“tab url changed”就会在控制台中打印出来

     console.log("ready");
     $(document).ready(function() {
     var button = document.getElementsByClassName("recommend u-flexColumn u-marginBottom10 u-width60")[0];
     if (button) {
      console.log("element is ready");
     }
     });
因此,每当我点击网站内的链接时,“就绪”总是被打印出来。但是“element is ready”并不总是打印出来,因为$(document).ready(function()只在页面重新加载时执行。如何让文档后的代码也准备好每次执行,而不必每次重新加载页面?我还在manifest.json中添加了“run_at”:“document_end”。

您对的使用不正确

您应该将
tabId
作为第一个参数传递:

chrome.tabs.onUpdated.addListener(function(tabId, changeInfo, tab) {
  if (changeInfo.url) {
      console.log("tab url changed");
      chrome.tabs.executeScript(tabId, {file: "js/jquery-3.2.1.min.js"});
      chrome.tabs.executeScript(tabId, {file: "payload.js"});
  }
});

谢谢,但这并没有解决问题。根本不要使用
ready
。文档准备就绪后,您的代码已经运行。