Javascript 当有一个弹出页面时,如何在页面加载时插入内容脚本?
我正在尝试使用google chrome扩展的内容脚本方法注入我的代码。仅当我的清单没有弹出页面且my background.html有以下内容时,此选项才有效: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: "
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" });
});
});