实现一个Chrome扩展开/关切换按钮

implementing a Chrome extension on/off toggle button

本文关键字:按钮 扩展 Chrome 一个 实现      更新时间:2023-09-26

我正试图实现一个开/关切换为我的扩展,这是一个内容脚本挂钩到"beforeload"事件,并有选择地取消基于一些逻辑请求(例如:你想阻止某个域名的URL加载,某个特定的URL加载,等等)。

我正在设置一个"启用"变量在我的背景页和使用chrome.extension.sendRequest()在我的内容脚本&chrome.extension.onRequest.addListener()在我的后台扩展页检索扩展的启用/禁用状态

背景脚本:

Settings = {};
Settings.enabled = 1;
chrome.extension.onRequest.addListener(
    function(request, sender, sendResponse) {
        if (request.getState == "enabled") {
            sendResponse({result: Settings.enabled});
        } else {
            sendResponse({});
        }
    }
);

我有一个处理设置启用/禁用变量的弹出页面。当点击"启用"按钮时,chrome.extension.getBackgroundPage().Settings.enabled = 1;触发,当点击"禁用"按钮时,
chrome.extension.getBackgroundPage().Settings.enabled = 0;火灾(此功能工作正常)

我的内容脚本我开始检查"启用/禁用"变量(should_block_request是伪代码):

(function() {
    document.addEventListener("beforeload", function(event) {
        if (should_block_request) {
            event.preventDefault();
        }
    }, true);
}());  

这里是之后,使用chrome.extension.sendRequest()的消息传递来查询后台页面中的"启用"设置,并在其回调中执行请求阻塞逻辑

(function() {
    document.addEventListener("beforeload", function(event) {
        chrome.extension.sendRequest({getState: "enabled"}, function(response) {
            var enabled = response.result;
            if (!enabled) {
                return; 
            } else {
                if (should_block_request) {
                    event.preventDefault();
                }
            };
        });
    }, true);
}());

"之前"内容脚本按预期工作,当满足条件时阻止请求,但是当我尝试我的内容脚本的"事后"版本时,标准是仍然满足,但请求不被阻止,即使event.preventDefault()被调用。

chrome.extension.sendRequest()是检查设置的正确方法吗?启用变量内的"beforeload"事件处理程序回调?event.preventDefault()是否需要调用一个比我目前拥有的级别更高的级别?

我不确定这是否有帮助,但在chrome v16和以后的扩展可能禁用/启用javascript。

这里有一个这样的扩展:http://code.google.com/p/chromium/issues/detail?id=71067