gpt4 book ai didi

javascript - 实现 Chrome 扩展开/关切换按钮

转载 作者:行者123 更新时间:2023-11-28 10:04:36 25 4
gpt4 key购买 nike

我正在尝试为我的扩展实现一个开/关切换,这是一个内容脚本,它 Hook “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() 进行消息传递查询后台页面的“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);
}());

“之前”内容脚本按预期工作,在满足条件时阻止请求,但是当我尝试内容脚本的“之后”版本时,条件仍然得到满足,但是即使调用 event.preventDefault() ,请求也不会被阻止。

chrome.extension.sendRequest() 是检查“beforeload”事件处理程序回调中的 Settings.enabled 变量的正确方法吗? event.preventDefault() 是否需要调用比我当前拥有的级别更高的级别?

最佳答案

我不确定这是否有帮助,但在 chrome v16 和更高版本的扩展中可能会禁用/启用 javascript。

这是一个这样的扩展:http://code.google.com/p/chromium/issues/detail?id=71067

关于javascript - 实现 Chrome 扩展开/关切换按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8584527/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com