Javascript 当有一个弹出页面时,如何在页面加载时插入内容脚本?

Javascript 当有一个弹出页面时,如何在页面加载时插入内容脚本?,javascript,google-chrome-extension,Javascript,Google Chrome Extension,我正在尝试使用google chrome扩展的内容脚本方法注入我的代码。仅当我的清单没有弹出页面且my background.html有以下内容时,此选项才有效: chrome.browserAction.onClicked.addListener(function(tab) { chrome.tabs.executeScript(null, { file: "jquery.js" }, function() { chrome.tabs.executeScript(null, { file: "

我正在尝试使用google chrome扩展的内容脚本方法注入我的代码。仅当我的清单没有弹出页面且my background.html有以下内容时,此选项才有效:

chrome.browserAction.onClicked.addListener(function(tab) {
chrome.tabs.executeScript(null, { file: "jquery.js" }, function() {
chrome.tabs.executeScript(null, { file: "content_script.js" });
});
});
我怎样才能在每次chrome中加载一个新页面时触发这个代码,同时有一个弹出页面?因为到目前为止,它工作的唯一方式是单击扩展的浏览器操作按钮

在清单的“我的内容脚本”部分,我还包括了以下所有内容:

"content_scripts": [
{

"matches": ["http://jquery.com/*"],
"all_frames":true,
  "js": ["jquery.js","jquery-ui.min.js","content_script.js"],
   "run_at": "document_end"
}
],  

简短回答:使用
chrome.tabs.onUpdated.addListener
而不是背景页面中的
chrome.browserAction.onClicked.addListener
,以便在每次页面更新时加载内容脚本

详细回答:事实上,当内容脚本是一个弹出页面时,您可以通过从清单中包含内容脚本或从后台页面使用编程注入(如您在问题中所建议的)加载内容脚本

从舱单中: 确保“matches”属性与要加载内容脚本的页面的URL匹配

使用编程注入: 您可以使用问题中建议的方式,在单击浏览器操作时插入内容脚本,或者在每次更新浏览器URL时插入内容脚本,如下所示:

chrome.tabs.onUpdated.addListener(function() {
  chrome.tabs.executeScript(null, { file: "jquery.js" }, function() {
    chrome.tabs.executeScript(null, { file: "content_script.js" });
  });   
});

非常感谢这解决了我所有的问题!现在唯一的问题是executeScript被多次调用,有没有办法避免这种情况?我猜onUpdated在加载时会在页面上被调用几次?事实上,不管怎样,我尝试了清单中的匹配,并为匹配设置了“http://*/*”,即使没有编程注入,它也能工作!您可以在使用编程注入时确定脚本是否已加载,但这有点棘手,请参见此处:
chrome.tabs.onUpdated.addListener(function() {
  chrome.tabs.executeScript(null, { file: "jquery.js" }, function() {
    chrome.tabs.executeScript(null, { file: "content_script.js" });
  });   
});