我制作的Chrome扩展程序仅允许用户访问指定白名单中的网站。 3
非常适合拦截和检查网址,但我遇到的问题是它会检查所有传入的网址,包括网页何时尝试加载资源。我希望它只检查用户输入的URL,如果该URL在白名单上,我希望它允许该网页加载它需要的任何资源,无论它们是否在白名单中。
这是我的听众代码。
chrome.webRequest.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>"
],
},
["blocking"]);
将返回true或false,具体取决于网址是否在白名单中。
答案 0 :(得分:3)
尝试仅过滤“用户输入的”网址很棘手,但可能对您有所帮助的是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"]);
答案 1 :(得分:0)
info
有一个名为type
的属性,它返回webRequest的resourceType。
此处列出了资源类型:https://developer.chrome.com/extensions/webRequest#type-ResourceType,&#34; main_frame&#34;是你正在寻找的类型。
chrome.webRequest.onBeforeRequest.addListener(
function(info) {
if(info.type == "main_frame"){
doMyStuff();
return {cancel: denyRequest};
}
},
{
urls: [
"<all_urls>"
],
},
["blocking"]);