是否可以在页面加载和点击时运行Chrome扩展程序?
如果用户在特定页面上,我希望扩展程序运行并将脚本附加到已加载的页面的头部。
然后我希望用户能够点击扩展名,扩展程序会运行一个不同的脚本来调用页面上的脚本。
我在页面加载时看到以下内容:
chrome.tabs.onUpdated.addListener( function (tabId, changeInfo, tab) {
if (changeInfo.status == 'complete' && tab.active) {
// run script/code here
}
})
我在点击时一直使用以下内容:
chrome.browserAction.onClicked.addListener(function (tab) {
if (tab.url.indexOf(".mydomain.com/") != -1) {
chrome.tabs.executeScript(tab.id, {
"file": "contentscript.js"
}, function () {
console.log("Script Executed...");
});
} else {
var wrongTab = chrome.i18n.getMessage("wrongTab");
alert(wrongTab);
}
});
但我想将它们合并在一起,因为在页面上附加脚本似乎并不总是正确加载:/
答案 0 :(得分:0)
要始终在某个页面上加载,您应该使用manifest-injected scripts,例如
"content_scripts" : [
{
"matches" : ["*://*.mydomain.com/*"],
"js" : ["contentscript.js"]
}
],
这将自动应用于(重新)加载的匹配URL上的任何页面。
当您想要在点击时注入脚本时(我只在与第一个脚本相同的域上的页面上?),我不太明白。如果您想要通知现有内容脚本执行某些操作,最好的方法是使用Messaging:
// contentscript.js
chrome.runtime.onMessage.addListener(function(message, sender, sendResponse){
if(message.doSomething){
/* do something with message.data */
}
});
// background.js
chrome.browserAction.onClicked.addListener(function (tab) {
chrome.tabs.sendMessage(
tab.id,
{doSomething: true, data: "anything"},
function(response) {
if(chrome.runtime.lastError) {
// There was no script listening
}
}
);
});
如果您想在任何页面中执行某些操作,不仅是您按下的按钮,还需要使用chrome.tabs.executeScript
。如果您希望该按钮仅在某些网页上有效,请考虑改为使用Page Action。
另外,请注意所需的权限。如果你想在点击处理程序的标签上操作,"activeTab"
permission是一件好事。