我正试图实现一个开/关切换为我的扩展,这是一个内容脚本挂钩到"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"事件处理程序回调?event.preventDefault()是否需要调用一个比我目前拥有的级别更高的级别?
我不确定这是否有帮助,但在chrome v16和以后的扩展可能禁用/启用javascript。
这里有一个这样的扩展:http://code.google.com/p/chromium/issues/detail?id=71067