我尝试制作一个Google Chrome扩展程序,在点击扩展程序图标时注入脚本。但是,我想在加载/转到另一个页面时注入相同的脚本,而不必再次单击扩展图标。
background.js
chrome.browserAction.onClicked.addListener(function (tab) {
if (tab.url.startsWith("https://")){
chrome.tabs.executeScript(tab.id, {
"file": "js/contentscript.js"
}, function () {
console.log("Script Executed .. "); // Notification on Completion
});
}
else{
alert('Error');
}
});
manifest.json 我想在browserAction上执行脚本,所以在content_scripts上添加脚本不是我想要追求的选项
"permissions": ["tabs", "windows", "notifications", "activeTab"],
"version": "2.0",
"browser_action":
{
"name": "Click to activate extension",
"default_icon": "images/icon.png",
},
"background":
{
"scripts":["js/background.js"]
},
"icons":
{
"16": "images/icon16.png",
"48": "images/icon48.png",
"128": "images/icon128.png"
},
"content_scripts":
[{
"js": ["js/jquery-2.1.4.min.js"],
"matches": [ "https://*/*" ],
"run_at": "document_end"
}]
contenscript.js - 只是一个示例脚本,但我的观点是
alert("here");
setTimeout(function(){window.open("www.google.com");});
P.S。这是我第一次在stackoverflow中提问,请对我温柔。 :d
答案 0 :(得分:3)
您可以收听webNavigation.onCompleted事件,该事件在文档(包括其引用的资源)被完全加载和初始化时触发。
与tabs.onUpdated事件相比,您可以使用event filters来限制事件通知。对于本部分,您可以在此帖Running an extension in background on page load/refresh中查看我的答案以获取更多详细信息。
的manifest.json
{
"name": "36735306",
"version": "1.0",
"description": "Your description here",
"manifest_version": 2,
"background": {
"scripts": ["background.js"]
},
"web_accessible_resources": ["content.js"],
"permissions": [
"webNavigation",
"<all_urls>"
]
}
background.js
chrome.webNavigation.onCompleted.addListener(function(details) {
if(details.frameId === 0) {
chrome.tabs.executeScript(details.tabId, {"file": "content.js"});
}
});