Chrome扩展程序“未捕获的错误:无效的值”使用重定向规则

时间:2012-12-22 19:10:52

标签: javascript google-chrome

我正在尝试编写一个扩展程序,当它检测到Chrome请求它们时会下载音频文件。我将这个项目基于Google提供的两个样本“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一般都很公平,所以我确信这是一个简单的解决方法,但我无法理解。有什么想法吗?

1 个答案:

答案 0 :(得分:3)

我认为问题在于您指定了不受支持的操作。可以在the chrome.declarativeWebRequest page上找到可用操作列表。

我认为您应该使用chrome.webRequest.onBeforeRequestonHeadersReceivedonComplete来跟踪媒体链接并从那里启动自定义下载,可能会以某种延迟方式,因为我不确定{ {1}}只能从另一个请求处理程序工作。

要开始,您可以查看Google的CatBlock示例,或其他related answeranother one。基本上,您需要通过downloads添加适当的事件处理程序,并在处理程序调用{​​{1}}中,其中addListener作为输入参数传递给处理程序。

您应根据自己的要求决定选择哪个事件(例如chrome.downloads.download({url: request.url})request)。据我了解,您不希望阻止原始请求,因此等待原始下载完成,然后在onBeforeRequest处理程序中处理它可能会很有用,这样Chrome就可以通过仅复制来优化该过程从缓存中下载文件。

作为替代方案,您可以通过从每个声音文件的onComplete处理程序返回onComplete来阻止初始下载,然后将其作为单个文件开始下载,可能涉及{cancel: true}选项。