错误:参数4的值无效。属性'方法':意外的属性

时间:2014-12-01 19:45:53

标签: javascript google-chrome google-chrome-extension

我正在尝试更改用户发出的请求的请求方法(发出POST请求)但我收到此错误:

Error in event handler for webRequest.onBeforeSendHeaders/1: Error: Invalid value for argument 4. Property 'method': Unexpected property.

我的代码是:

chrome.webRequest.onBeforeSendHeaders.addListener(function(data) {
    console.log(data);
    return {method: "POST"};
}, { 
    urls: ["<all_urls>"]
}, ["blocking", "requestHeaders"]);

我错过了什么吗?我搜索了很多,但找不到任何更改webRequest

请求方法的内容

1 个答案:

答案 0 :(得分:3)

扩展API不会立即支持更改HTTP方法。有几种方法可以获得所需的结果。在下面的答案中,我将仅解释如何对sub_framemain_frame类型的请求执行此操作,因为这可能是您想要的(对于image等类型的POST或stylesheet真的没有意义。)

您可以修改请求者,使其通过content script发起POST请求而不是GET请求。例如。找到<form>并将action设置为"POST"

一种有效的通用方法是拦截请求并重定向到您的扩展页面,然后将表单提交到所需目标。 不要忘记将页面添加到web_accessible_resources 。您可以通过URL(查询字符串或引用片段)将参数传递给帧,或者将参数存储在后台页面的字典中,并使用extension messaging API进行通信。 示例(使用查询字符串传递URL):

chrome.webRequest.onBeforeRequest.addListener(function(details) {
    var url = chrome.runtime.getURL('redirector.html') +
            '?' + encodeURIComponent(details.url)
    return {
        redirectUrl: url
    };
}, { 
    types: ['main_frame', 'sub_frame'],
    urls: ['*://example.com/*']
}, ['blocking']);

redirector.html(将此页面添加到web_accessible_resources!):

<form method="POST" id="form"></form>
<script src="redirector.js"></script>

redirector.js可以包含(注意:参数验证留给读者练习):

var form = document.forms['form'];

// URL is passed via the parameters
// "chrome-extension://[extensionid]/redirector.html?http%3A%2F%2Fexample.com%2F
//                                                  ^
//                                                  becomes http://example.com
form.action = decodeURIComponent(location.search.slice(1));

// Example: Append extra form data
var input = document.createElement('input');
input.type = 'text'; // Default
input.value = 'extra data';
form.appendChild(input);

form.submit();

这是一个非常简单的例子。如果要将更多数据传递到页面,请选择适当的参数序列化(例如JSON或&param=value)。阅读文档以获取有关(动态生成的)表单的更多信息:<form>HTMLFormElement