3

私の Chrome 拡張機能を Firefox に変換したいと考えています。これまでのところ、Firefox WebExtensions では許可されていないwebRequest.onBeforeRequestChrome 拡張機能にURL リダイレクトがあったことを除けば、これで問題ありません。

これを Firefox に実装する方法がわかりません。
Chromebackground.jsでは、次のように表示されます。

chrome.webRequest.onBeforeRequest.addListener(
  function(details) {
    console.log('onBeforeRequest');

    var returnuri;
    returnuri = details.url;
    if ((details.url.indexOf("/malicious/") > -1) || (details.url.indexOf("/bad/") > -1)){
      //I want to redirect to safe content
      returnuri = details.url + (/\&tag=/.test(details.url) ? "" : '/safe/');
    }else{
      returnuri = details.url;
    }
    return {redirectUrl: returnuri};
  },
  {
    urls: [
      "*://malicious.com/*"
    ],
    types: ["main_frame"]
  },
  ["blocking"]
);
4

1 に答える 1

4

WebExtensions docsを引用します:

リクエストは次のとおりです。

  • でのみキャンセルonBeforeRequest
  • でのみ変更/リダイレクトonBeforeSendHeaders

...

リダイレクトはonBeforeRequestまたはonHeadersReceivedでは許可されていませんが、 では許可されていonBeforeSendHeadersます。

まあ、それは状況をかなりよく説明しています。オプションは次のとおりです。

  1. WebExtensions のサポートが向上するまでお待ちくださいwebRequest

EDIT(2018年12月):これは確かに可能になりました。ドキュメントを引用:

これらのイベントの一部では、リクエストを変更できます。具体的には、次のことができます。

  • リクエストをキャンセル:
    • onBeforeRequest
    • onBeforeSendHeaders
    • onAuthRequired
  • リクエストを次の場所にリダイレクトします。
    • onBeforeRequest
    • onHeadersReceived

[...]

  1. どうしても接続を確立しないことがどうしても必要な場合は、リクエストをキャンセルし、リダイレクトしないでください。

  2. 代わりにリダイレクトしonBeforeSendHeadersます。URL のみをチェックしていて、そのイベントで利用できることを考えると、リダイレクトする前に TCP 接続が既に確立されている可能性があることを除いて、違いはありません。

    同じコードは Chrome では機能しないことに注意してください。このリクエストではリダイレクトは想定されていません。

    ご指摘のとおり、Chrome とは異なり、同じ URL にリダイレクトするとループが発生します (この時点でリクエストを最初からやり直す必要があるため)。

    一般に、以前のイベントで利用可能なものを検査し、後でそれに対処する必要がある場合は、そのリクエストをonBeforeRequest保存しrequestIdて後で同じリクエスト ID を にリダイレクトすることで、リクエストにフラグを付けることができますonBeforeSendHeaders残念ながら、ドキュメントにrequestIdもサポートされていない状態があります。

于 2016-03-05T09:16:54.687 に答える