我试图为我的扩展实现开/关切换,这是一个内容脚本,钩入“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()是否需要被调用比我目前拥有的更高的级别?