我試圖爲我的擴展實現開/關切換,這是一個內容腳本,鉤入「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()是否需要被調用比我目前擁有的更高的級別?