0

リソースが完全にロードされる前に、リソース(JavaScriptやCSSファイルなど)をブロックする必要があります。リソースがブロックされた場合の条件は、その内容によって異なります。実際には、これを行うための解決策はありませんか?WebExtensionsにロードされる前のコンテンツに基づいてリソースをブロックする方法はありますか?

私の知るところ: Web拡張機能はChrome拡張機能に似ているため、webRequest.onBeforeRequestリスナーもあります。リスナーはファイルをブロックできます。

function cancel(requestDetails) { 
    console.log("Canceling: " + requestDetails.url); 
    return {cancel: true}; 
} 

chrome.webRequest.onBeforeRequest.addListener(
    cancel, 
    {urls: ["<all_urls>"], types: ["script"]}, 
    ["blocking"] 
); 

この時点まではすべて問題ありません。 requestBodyオプションも必要です。そのため、ファイルの内容に基づいて決定することができます。しかしMozilla Docは言う:

  1. Firefoxは "requestBody" オプションをサポートしていません。

ああ、悪い話ではない。 URLデータを取得するには、非同期XHRリクエストが必要です。

function cancel(requestDetails) { 
    return {cancel: getUrlContent(requestDetails.url, function(result) { 
     if(condition) { console.log(true); } else { console.log(false); } 
    })}; 
} 

// asynchron XHR request 
function getUrlContent(url, callback) { [...] } 

=>これは動作しません。 return {キャンセル:X};は通常の機能を受け入れます。return {cancel:doSth()};ですが、非同期コールバックはありません。結果をキャンセルしてJSONに返すオプションはありません。

他のstackoverflowの質問では、nsIContentPolicyについては、
XPCOMの一部です。ヒント、サンプル、または説明が見つかりませんでした.Firefox WebExtension環境でこれをどのように使うことができますか?これは可能ですか?そしてもしそうなら、どうですか?

どちらもできない場合は、どうすればこのような拡張子を使用できますか? WebExtensionを使わずに廃止予定のXPCOMを使用する必要がありますか?

+0

http://www.html5rocks.com/en/tutorials/service-worker/introduction/ – guest271314

+0

を参照してください。@ guest271314:ありがとうございます。それは素晴らしいツールのように見えます。私はサービスワーカーを登録しようとしましたが、失敗しました。私がバックグラウンドスクリプトに入れたら、接続は安全ではないと言います。サービスワーカーJavaScriptファイルを追加しました。このファイルは、登録後に "web_accessible_resources"に呼び出されます。私はそれをコンテンツのスクリプトに入れても、同じエラーが表示されます。私は何かが恋しくなったり、どこに登録しなければならないのですか?余分な権限が必要ですか?それとも、HTTPSのないローカルなので、拡張コンテキストでは機能しませんか? URLはmoz-extension:// long-hash/...についてです。 – Zeussi

+0

_ "HTTPSがないので、ローカルですか?"はいはい – guest271314

答えて

1

requestBodyは、今後のバージョンのFirefox(現在は50と思われます):bugzilla.mozilla.org/show_bug.cgi?id=1201979のように見えます。つまり今週は49がリリースされたので、おそらくベータ版でテストすることができます。

+1

注:これは** request ** bodyです。応答本体ではありません。応答に基づいてキャンセルすることはできません(遅すぎます)。 – Xan