[英]Chrome webRequest listening to only user entered URLs
我正在制作Chrome擴展程序,僅允許用戶訪問指定白名單中的網站。 chrome.webRequest.onBeforeRequest
非常適合攔截和檢查URL,但我遇到的問題是它會檢查所有傳入的URL,包括網頁何時嘗試加載資源。 我希望它只檢查用戶輸入的URL,如果該URL在白名單上,我希望它允許該網頁加載它需要的任何資源,無論它們是否在白名單中。
這是我的監聽器代碼。
chrome.webRequest.onBeforeRequest.addListener(
function(info) {
console.log("URL: " + info.url);
var pageURL = info['url'];
let mngwlst = new ManageWhitelist();
var whitelist = mngwlst.getWhitelist();
if(whitelist == null) mngwlst.setWhitelist([]);
var denyRequest = false;
var denyRequest = monitor.ExamineWhitelist(pageURL, whitelist);
console.log(denyRequest);
return {cancel: denyRequest}
},
{
urls: [
"<all_urls>"
],
},
["blocking"]);
monitor.ExamineWhitelist(pageURL, whitelist)
將返回true或false,具體取決於URL是否在白名單中。
嘗試僅過濾“用戶輸入的”網址很棘手,但可能對您有所幫助的是webRequest資源類型: https : //developer.chrome.com/extensions/webRequest#type-ResourceType
資源類型允許您僅篩選某些類型的請求。 例如,'Main_frame'是在頂層框架加載的文檔。 這樣,每次請求圖像或樣式表時,onBeforeRequest偵聽器都不會觸發。
您可以按照按網址過濾的相同方式按類型進行過濾:
chrome.webRequest.onBeforeRequest.addListener(
function(info) {
console.log("URL: " + info.url);
var pageURL = info['url'];
let mngwlst = new ManageWhitelist();
var whitelist = mngwlst.getWhitelist();
if(whitelist == null) mngwlst.setWhitelist([]);
var denyRequest = false;
var denyRequest = monitor.ExamineWhitelist(pageURL, whitelist);
console.log(denyRequest);
return {cancel: denyRequest}
},
{
urls: ["<all_urls>"],
types: ["main_frame"],
},
["blocking"]);
info
有一個名為type
的屬性,它返回webRequest的resourceType。
此處列出了資源類型: https : //developer.chrome.com/extensions/webRequest#type-ResourceType ,其中“main_frame”是您要查找的類型。
chrome.webRequest.onBeforeRequest.addListener(
function(info) {
if(info.type == "main_frame"){
doMyStuff();
return {cancel: denyRequest};
}
},
{
urls: [
"<all_urls>"
],
},
["blocking"]);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.