我正在尝试为我的扩展实现一个开/关切换,这是一个挂钩到“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()是否需要调用比我目前更高的级别?
答案 0 :(得分:0)
我不确定这是否有用,但在chrome v16及更高版本的扩展中可能会禁用/启用javascript。
以下是一个此类扩展程序:http://code.google.com/p/chromium/issues/detail?id=71067