javascript - Chrome 扩展程序的自动化功能?

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

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

由于这是一件苦差事,我正在尝试创建一个 Chrome 扩展程序,单击后即可简单地打开/关闭所有这些扩展程序。首先,这是否可以做到?如果是,我该怎么做?

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

最佳答案

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

使用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"]
    

    背景.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. 导航到指定网址时自动启用扩展程序

    某些扩展程序可能希望将其内容脚本注入(inject)“document_start”,所以我想我们需要 chrome.webNavigation.onBeforeNavigate 。尽管此事件不能保证实际导航会发生,但这可能是及时启用扩展的唯一方法。

    使用event filters要指定要激活的 URL,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”“选项卡”
    后台页面声明可以与#1中的相同。

关于javascript - Chrome 扩展程序的自动化功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39279019/

相关文章:

javascript - ng grid shift select bug 选择额外的行

javascript - 如果父组件中的参数发生更改,则子组件的数组不会重新渲染

javascript - 在 JavaScript 中,myArray.length = 0 与 myArray = new Array() 之间有什么区别?

javascript - 有条件地链接到 Angular4 中 Twitter 的图像

html - 在 chrome 中选择粗体的下拉选项

javascript - 在 chrome 扩展程序中显示通知

jquery - Kendo UI网格/内联编辑中 "productService"是什么意思

javascript - 鼠标单击 Canvas 的一部分、鼠标悬停在 Canvas 上和鼠标移出 Canvas

javascript - 禁用 AJAX 请求直到完成?

javascript - Chrome - 扩展选项屏幕不允许我关注下一个字段