Chrome webRequest仅收听用户输入的网址

时间:2016-03-24 18:32:16

标签: javascript google-chrome google-chrome-extension

我制作的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,具体取决于网址是否在白名单中。

2 个答案:

答案 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"]);