根据其文档,GM_xmlhttpRequest
应该能够将data
参数作为其参数的一部分。
但是,我似乎无法让它工作。
我有一个简单的服务器来回显给它的参数:
require 'sinatra'
require 'json'
get '/' do
JSON.dump params
end
post '/' do
JSON.dump params
end
还有一个简单的greasemonkey 脚本,它只是尝试将一些数据发布到服务器。它尝试将数据作为 URL 中的查询参数和 postdata 传递:
// ==UserScript==
// @name PostDataTest
// @namespace Test
// @description Simple test of GM_xmlhttpRequest's data parameter
// @include http://localhost:4567/
// @version 1
// @require http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js
// @grant metadata
// @grant GM_xmlhttpRequest
// ==/UserScript==
var url = '/?q0=0&q1=1';
var data = 'd0=0&d1=1'
GM_xmlhttpRequest({ method: 'POST', url: url, data: data, onload: function(r){
console.log('gm:' + r.responseText);
}});
$.post(url, data, function(d,s,r){
console.log('jq:' + r.responseText);
});
当我使用 jQuery 发布 postdata 时,它工作正常,但我使用的任何 postdata 都会GM_xmlhttpRequest
被忽略:
jq:{"q0":"0","q1":"1","d0":"0","d1":"1"}
gm:{"q0":"0","q1":"1"}
这让我相信这GM_xmlhttpRequest
实际上并没有使用data
我给它的参数。(我不确定 b/c 我无法GM_xmlhttpRequest
在 Firebug 中监控网络活动)。
这里发生了什么?我搞砸了什么吗?API是否发生了变化?如何GM_xmlhttpRequest
在不将数据打包到 URL 的情况下发布数据?