Chrome 扩展:每 X 秒单击一个按钮
Chrome extension: Clicking a button every X seconds
我是 chrome 扩展开发的超级新手,但我确实有一些非常基本的 JS 知识。我正在尝试为特定站点制作此扩展程序,我将在其中进行浏览器操作(最好是两个:开始和停止)。我会单击一个浏览器操作 (START),然后会启动一个脚本,该脚本会重复单击一个按钮,例如每 1 或 2 分钟一次。然后我可以单击停止浏览器操作来停止它。
任何人都可以指导我正确的方向如何做到这一点,因为 chrome 消息解析和 foreground/background 脚本的整个想法让我有点困惑。另外,对于这种特殊情况,运行 重复这样的代码的最佳方法是什么?
非常感谢我能得到的所有帮助。
可以添加图标pageAction API (an icon inside the address box) or browserAction API (an icon on the toolbar). See sample extensions to get the feel how the API may be used: pageAction, browserAction。
正如您从示例中看到的,这两个 API 都是从后台脚本中使用的。要操作活动页面 DOM 只需注入内容脚本 file/code 和 chrome.tabs.executeScript 然后点击按钮。
这是一个非常基本的 browserAction 示例,没有使用消息,因为我们可以简单地检查我们的 interval
变量是否已经被之前的注入定义。注入的内容脚本在其自己的 "isolated world" 中运行,因此您不必担心与页面脚本或变量发生冲突。
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);
}
}
我是 chrome 扩展开发的超级新手,但我确实有一些非常基本的 JS 知识。我正在尝试为特定站点制作此扩展程序,我将在其中进行浏览器操作(最好是两个:开始和停止)。我会单击一个浏览器操作 (START),然后会启动一个脚本,该脚本会重复单击一个按钮,例如每 1 或 2 分钟一次。然后我可以单击停止浏览器操作来停止它。
任何人都可以指导我正确的方向如何做到这一点,因为 chrome 消息解析和 foreground/background 脚本的整个想法让我有点困惑。另外,对于这种特殊情况,运行 重复这样的代码的最佳方法是什么?
非常感谢我能得到的所有帮助。
可以添加图标pageAction API (an icon inside the address box) or browserAction API (an icon on the toolbar). See sample extensions to get the feel how the API may be used: pageAction, browserAction。
正如您从示例中看到的,这两个 API 都是从后台脚本中使用的。要操作活动页面 DOM 只需注入内容脚本 file/code 和 chrome.tabs.executeScript 然后点击按钮。
这是一个非常基本的 browserAction 示例,没有使用消息,因为我们可以简单地检查我们的 interval
变量是否已经被之前的注入定义。注入的内容脚本在其自己的 "isolated world" 中运行,因此您不必担心与页面脚本或变量发生冲突。
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); } }