Chrome扩展程序:每隔X秒单击一次按钮

时间:2015-10-05 19:44:12

标签: javascript google-chrome-extension timer click

我是chrome扩展开发的新手,但我确实有一些非常基本的JS知识。我正在尝试进行此扩展,对于特定站点,我将进行浏览器操作(最好是两个:START和STOP)。我会点击浏览器操作(START)并启动一个脚本,例如每隔1或2分钟重复单击一个按钮。然后我可以单击STOP浏览器操作来停止它。

任何人都可以指导我正确的方向如何做到这一点,因为Chrome消息解析和前景/后台脚本的整个想法对我来说有点混乱。对于这种特殊情况,运行代码的最佳方法是什么呢?

非常感谢,我感谢所有帮助。

1 个答案:

答案 0 :(得分:2)

可以使用pageAction API(地址框内的图标)或browserAction API(工具栏上的图标)添加图标。请参阅示例扩展,了解API的使用方式:pageActionbrowserAction

从样本中可以看出,这些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);
        }
    }