实施Chrome扩展程序开启/关闭切换按钮

时间:2011-12-21 02:48:00

标签: javascript google-chrome event-handling callback google-chrome-extension

我正在尝试为我的扩展实现一个开/关切换,这是一个挂钩到“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”事件处理程序回调中的Settings.enabled变量的正确方法吗? event.preventDefault()是否需要调用比我目前更高的级别?

1 个答案:

答案 0 :(得分:0)

我不确定这是否有用,但在chrome v16及更高版本的扩展中可能会禁用/启用javascript。

以下是一个此类扩展程序:http://code.google.com/p/chromium/issues/detail?id=71067