2

Chromeから要求されていることを検出したときにオーディオファイルをダウンロードする拡張機能を作成しようとしています。このプロジェクトは、Googleが提供する2つのサンプル「Download_links」と「catifier」のコードに基づいています。これが私が現在持っているものです:

var RequestMatcher = chrome.declarativeWebRequest.RequestMatcher;
var IgnoreRules = chrome.declarativeWebRequest.IgnoreRules;
var RedirectRequest = chrome.declarativeWebRequest.RedirectRequest;
var songFileURL = "http://somefile.mp3";
...
function registerRules() {
    var redirectRule = {
    priority: 100,

    conditions: [
        new RequestMatcher({
            contentType: ['audio/mp3']
        }),
    ],

    actions: [
        chrome.downloads.download({url: songFileURL}),
    ]
};
...

これをロードして試してみると、エラーUncaught Error: Invalid value for argument 1. Property '.0': Value does not match any valid type choices. が発生します。何を試しても、このエラーの原因を特定できません。私はChrome拡張機能とJavaScript全般にかなり慣れているので、これは簡単な修正だと確信していますが、理解できません。何か案は?

4

1 に答える 1

3

問題は、サポートされていないアクションを指定していることだと思います。利用可能なアクションのリストはchrome.declarativeWebRequestページにあります。

chrome.webRequest.onBeforeRequestonHeadersReceived、またはonCompleteを使用して、メディア リンクをトレースし、そこからカスタム ダウンロードを開始する必要があると思いますdownloads

開始するには、GoogleのCatBlockの例、または別の関連する回答または別の回答を見ることができます。基本的に、 を使用して適切なイベント ハンドラーを追加する必要があります。また、 が入力パラメーターとしてハンドラーに渡されるaddListenerハンドラー invokechrome.downloads.download({url: request.url})に追加する必要があります。request

要件に基づいて、どちらのイベントを選択するか (onBeforeRequestまたは など) を決定する必要があります。onComplete私が理解しているように、元のリクエストをブロックしたくないので、元のダウンロードが完了するまで待ってからonCompleteハンドラーで処理すると便利な場合があります。これにより、Chrome はダウンロード済みのファイルをキャッシュからコピーするだけでプロセスを最適化できます。

{cancel: true}別の方法として、すべてのサウンド ファイルのハンドラから戻ることで初期ダウンロードをブロックし、場合によってはオプションonBeforeRequestを使用して、1 つのダウンロードとして開始することもできます。saveAs

于 2012-12-22T21:52:27.700 に答える