如何使用GM_xmlhttpRequest提交到基本的外部表单页面?

时间:2014-10-14 16:09:26

标签: javascript forms greasemonkey gm-xmlhttprequest

我为Greasemonkey创建了一个基本脚本,以便在Stack Overflow上搜索单词test

根据GM_xmlhttpRequest documentation,请求的参数应在data参数中指出。

// ==UserScript==
// @name        Test Search SO
// @namespace   Test Search SO
// @description Test Search SO
// @include     http://YOUR_SERVER.COM/YOUR_PATH/*
// @version     1
// @grant       GM_xmlhttpRequest
// ==/UserScript==

alert("Ready?");

GM_xmlhttpRequest({
  url: "http://stackoverflow.com/search",
  method: "GET",
  data: "q=test",
  onload: function(response) {
    document.getElementsByTagName("html")[0].innerHTML = response.responseText;
    alert("Done.");
  }
});

不幸的是,结果只是页面http://stackoverflow.com/search,如果data被忽略了。

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

要将数据发送到表单页面,通常必须使用POST 要使用POST,您通常还必须确保编码符合页面预期。

这有效:

GM_xmlhttpRequest ( {
    url:        "http://stackoverflow.com/search",
    method:     "POST",
    data:       "q=" + encodeURIComponent ("test"),
    headers:    {
        "Content-Type": "application/x-www-form-urlencoded"
    },
    onload:     function (response) {
        document.getElementsByTagName ("html")[0].innerHTML = response.responseText;
        alert ("Done.");
    }
} );

(不要忘记对参数进行URI编码。)


或者,许多此类网页会接受GET个请求,但您会将数据作为网址参数发送:

GM_xmlhttpRequest ( {
    url:        "http://stackoverflow.com/search?q=" + encodeURIComponent ("test"),
    method:     "GET",
    onload:     function (response) {
        document.getElementsByTagName ("html")[0].innerHTML = response.responseText;
        alert ("Done.");
    }
} );