2016-03-24 12 views
1

私は、指定したホワイトリストにあるウェブサイトにのみアクセスできるようにするChrome拡張機能を作成しています。 chrome.webRequest.onBeforeRequestはURLのインターセプトと検査には最適ですが、問題はウェブページがリソースを読み込もうとしているときを含め、すべての着信URLを調べることです。ユーザーが入力したURLのみを調べ、そのURLがホワイトリストにある場合は、ホワイトリストにあるかどうかにかかわらず、必要なすべてのリソースをそのWebページに読み込ませたいと思っています。ユーザーが入力したURLのみを聞くChromeのwebRequest

リスナー用のコードです。

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)はURLがあるか、ホワイトリストにない場合に応じて、trueまたはfalseを返します。唯一のフィルタリングしようとすると

答えて

1

URLの「ユーザーが入力された」はトリッキーですが、あなたはここに役立つかもしれないと、WebRequestクラスのリソースの種類である:https://developer.chrome.com/extensions/webRequest#type-ResourceType

リソースタイプだけリクエストの特定の種類をフィルタリングすることができます。たとえば、 'Main_frame'はトップレベルのフレームでロードされたドキュメントです。この方法では、イメージやスタイルシートが要求されるたびにonBeforeRequestリスナーが起動しません。あなたは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>"], 
    types: ["main_frame"], 
}, 
["blocking"]); 
+0

これは素晴らしいです!正確に私が必要としたもの。ありがとう。 – ToyGunner

+0

@ToyGunner問題はありません:) – dan

0

infoはWebRequestクラスのresourcetypeのを返しtypeという属性を持っています。

ここにリソースタイプが表示されます。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"]); 
+0

正しいのですが、パフォーマンス上の理由から、リスナーでフィルタリングするのではなく、登録時にフィルタを提供する方がはるかに優れています。 – Xan

関連する問題