Javascript 实现Chrome扩展的开/关切换按钮
我正在尝试为我的扩展实现一个开/关切换,这是一个内容脚本,它钩住“beforeload”事件,并根据某些逻辑(例如,您希望防止加载某个域的URL、加载某个特定URL等)选择性地取消请求 我正在后台页面中设置一个“enabled”变量,并在我的内容脚本中使用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
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);
}());