我是chrome扩展开发的新手,但我确实有一些非常基本的JS知识。我正在尝试进行此扩展,对于特定站点,我将进行浏览器操作(最好是两个:START和STOP)。我会点击浏览器操作(START)并启动一个脚本,例如每隔1或2分钟重复单击一个按钮。然后我可以单击STOP浏览器操作来停止它。
任何人都可以指导我正确的方向如何做到这一点,因为Chrome消息解析和前景/后台脚本的整个想法对我来说有点混乱。对于这种特殊情况,运行代码的最佳方法是什么呢?
非常感谢,我感谢所有帮助。
答案 0 :(得分:2)
可以使用pageAction API(地址框内的图标)或browserAction API(工具栏上的图标)添加图标。请参阅示例扩展,了解API的使用方式:pageAction,browserAction。
从样本中可以看出,这些API都是从后台脚本中使用的。要操作活动页面DOM,只需使用chrome.tabs.executeScript注入内容脚本文件/代码,然后单击该按钮。
这是一个非常基本的browserAction示例,不使用消息,因为我们可以检查我们的interval
变量是否已经由之前的注入定义。注入的内容脚本在其自己的“隔离世界”中运行。所以你不必担心页面脚本或变量的冲突。
的manifest.json
{
"name": "Start/stop",
"version": "1.0",
"permissions": ["activeTab"],
"background": {
"scripts": ["background.js"],
"persistent": false
},
"browser_action": {
"default_title": "Start me",
"default_icon": {
"19": "icon-start-19x19.png",
"38": "icon-start-38x38.png"
},
},
"manifest_version": 2
}
background.js,简单版本:
chrome.browserAction.onClicked.addListener(function(tab) {
chrome.tabs.executeScript({file: "content.js"});
});
background.js,高级版本,相应地更改图标并为每个标签单独更改:
chrome.browserAction.onClicked.addListener(function(tab) {
chrome.browserAction.getTitle({tabId: tab.id}, function(title) {
var newTitle, newIcon;
if (title.indexOf("Start") == 0) {
newTitle = "Stop me"; newIcon = "stop";
else {
newTitle = "Start me"; newIcon = "start";
}
chrome.browserAction.setTitle({tabId: tab.id, title: newTitle});
chrome.browserAction.setIcon({
tabId: tab.id,
path: {
19: "icon-"+newIcon+"-19x19.png",
38: "icon-"+newIcon+"-38x38.png"
}
});
chrome.tabs.executeScript({file: "content.js"});
});
});
content.js:
if (interval) {
clearInterval(interval);
interval = 0;
} else {
var btn = document.querySelector("button.something");
if (btn) {
var interval = setInterval(function() {
btn.click();
}, 60 * 1000);
}
}