1

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

我在我的背景页面设置一个“已启用”变量和我的内容脚本中使用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()传递查询‘在后台页面启用了’设置,并做请求块1 NG逻辑回调的内部

(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()是否需要被调用比我目前拥有的更高的级别?

回答