Greasemonkey AJAX返回的abort()不是函数?

时间:2013-01-06 18:21:22

标签: javascript ajax greasemonkey gm-xmlhttprequest

基本上,我尝试通过GM_xmlhttpRequest() Greasemonkey API发送请求并中止它。

这是一个演示脚本:

// ==UserScript==
// @name            example
// @namespace       example795cb636-1f35
// @include         https://www.google.com/
// ==/UserScript==

var ret = GM_xmlhttpRequest({
    method: "GET",
    url: "https://www.google.com/",
    onerror: function(response) {
        console.log("error : " + response.statusText);
    },
    onabort: function(response) {
        console.log("abort : " + response.statusText);
    },
    onload: function(response) {
        console.log("complete : " + response.statusText);
    }
});

try{
    ret.abort();
}
catch(e){
    console.log(ret);
    console.log(e);
}

这是我的控制台输出: enter image description here

我错过了什么?

详细说明:

Firefox 20.0a1
Greasemonkey 1.5

1 个答案:

答案 0 :(得分:4)

<强>更新
提交了rolled into GM version 1.9的补丁。这个问题现在正式解决了。


这是Greasemonkey中的一个错误。在Greasemonkey's xmlhttprequester.js source中,abortnot exposed properly, per Mozilla's COW interface

相关代码

var rv = {
    __exposedProps__: {
        finalUrl: "r",
        readyState: "r",
        responseHeaders: "r",
        responseText: "r",
        status: "r",
        statusText: "r"
        },
    abort: function () { return req.abort(); }
};

应为:

var rv = {
    __exposedProps__: {
        finalUrl: "r",
        readyState: "r",
        responseHeaders: "r",
        responseText: "r",
        status: "r",
        statusText: "r",
        abort: "r"
        },
    abort: function () { return req.abort(); }
};


请参阅相关错误:

  1. Provide abort() for GM_xmlhttpRequest
  2. GM_xmlhttpRequest response.responseText is undefined in...
  3. Use exposedProps

  4. 修补代码修复了错误。

    你可以:

    1. the Greasemonkey code,并使用您自己的版本(推荐) 和/或
    2. File a bug report