Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/431.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/google-chrome/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 实现Chrome扩展的开/关切换按钮_Javascript_Google Chrome_Event Handling_Callback_Google Chrome Extension - Fatal编程技术网

Javascript 实现Chrome扩展的开/关切换按钮

Javascript 实现Chrome扩展的开/关切换按钮,javascript,google-chrome,event-handling,callback,google-chrome-extension,Javascript,Google Chrome,Event Handling,Callback,Google Chrome Extension,我正在尝试为我的扩展实现一个开/关切换,这是一个内容脚本,它钩住“beforeload”事件,并根据某些逻辑(例如,您希望防止加载某个域的URL、加载某个特定URL等)选择性地取消请求 我正在后台页面中设置一个“enabled”变量,并在我的内容脚本中使用chrome.extension.sendRequest(),在后台扩展页面中使用chrome.extension.onRequest.addListener(),以检索扩展的启用/禁用状态 背景脚本: Settings = {}; Setti

我正在尝试为我的扩展实现一个开/关切换,这是一个内容脚本,它钩住“beforeload”事件,并根据某些逻辑(例如,您希望防止加载某个域的URL、加载某个特定URL等)选择性地取消请求

我正在后台页面中设置一个“enabled”变量,并在我的内容脚本中使用
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\u block\u request
为伪代码):

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

(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);
}());
“before”内容脚本按预期工作,在满足条件时阻止请求,但当我尝试内容脚本的“after”版本时,条件仍然满足,但即使调用了event.preventDefault(),请求也不会被阻止


chrome.extension.sendRequest()是否是检查“beforeload”事件处理程序回调中的Settings.enabled变量的正确方法?event.preventDefault()是否需要调用比我当前拥有的级别更高的级别?

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

这里有一个这样的扩展:

(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);
}());