1

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

回答