Chrome扩展程序的自动功能?

时间:2016-09-01 18:59:41

标签: javascript jquery google-chrome google-chrome-extension

我安装了一些Chrome扩展程序,需要在使用时打开/关闭。所有这些的默认状态都是关闭的。但是,当我访问某些特定的网页时,我需要将它们全部打开(没有选项来过滤这些扩展中的网页)。

由于这是一件苦差事,我正在尝试创建一个Chrome扩展程序,点击它后,只需打开/关闭所有这些扩展程序。首先,是否可以这样做?如果是的话,我该如何做呢?

例如,我想要自动化的扩展之一是TunnelBear VPN(在需要时通过我的扩展切换)

2 个答案:

答案 0 :(得分:2)

我自己正在使用这样的扩展转换器,所以我在这里复制了它的一些部分。

使用chrome.management API启用/停用扩展程序。

  1. 使用chrome.commands API通过热键手动启用扩展程序

    manifest.json,相关部分:

    "commands": {
        "toggle": {
            "suggested_key": {
                "default": "Alt+T"
            },
            "description": "Toggle extensions"
        }
    },
    "background": {
        "scripts": ["background.js"],
        "persistent": false
    },
    "permissions": ["commands", "management"]
    

    background.js:

    var IDs = ['aasdkfjhkjdfhdfjkhdkfjhdkjfh'];
    chrome.commands.onCommand.addListener(function(command) {
        IDs.forEach(function(ID) {
            chrome.management.get(ID, function(oldState) {
                chrome.management.setEnabled(ID, !oldState.enabled);
            });
        });
    });
    

    要通过简短的扩展名来获取ID:

    var IDs;
    chrome.management.getAll(function(info) {
        IDs = info.filter(function(extension) {
            return extension.shortName.match(/Name1|Name2|Name3/);
        }).map(function(extension) {
            return extension.id;
        });
    );
    

    或者,您可以定义两个热键来启用和禁用扩展名。

  2. 导航至指定网址时自动启用附加信息

    某些扩展程序可能希望在"document_start"上注入其内容脚本,因此我想我们需要chrome.webNavigation.onBeforeNavigate。即使此事件不能保证实际导航,但它可能是及时启用扩展的唯一方法。

    使用event filters指定要激活的网址,documentation中列出了可能的标准。

    // Enable the extension upon navigation to example.com
    
    chrome.webNavigation.onBeforeNavigate.addListener(beforeNavigate, {
        url: [{hostEquals: 'example.com'}, {urlContains: 'something'}]
    });
    
    function beforeNavigate(details) {
        if (details.frameId === 0) {
            setState(true);
        }
    }
    
    function setState(newState) {
        chrome.management.setEnabled('dhgfhdgfjgjhdgfjdfhdjhfdjhf', newState);
    }
    
    // And let's disable the extensions when that site is closed
    
    chrome.tabs.onRemoved.addListener(function(tabId, info) {
        chrome.tabs.get(tabId, function(tab) {
            if (tab.url.indexOf('://example.com') > 0) {
                setState(false);
            }
        });
    });
    
    // In the actual code you may want to track chrome.tabs.onUpdated too
    // in order to detect in-tab navigation from example.com to another site
    

    所需权限:"webNavigation""tabs"
    背景页面声明可以与#1相同。

答案 1 :(得分:1)

您可以尝试使用chrome.management API来停用/启用扩展程序。

但是,如果扩展程序所需的功能取决于某些触发器,例如点击扩展程序,则无法复制该功能。