2

基本上,我尝试通过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);
}

这是我的控制台输出: 在此处输入图像描述

我错过了什么?

细节:

火狐 20.0a1
Greasemonkey 1.5

4

1 回答 1

4

更新:
提交了一个被整合到 GM 版本 1.9的补丁。此问题现已正式解决。


这是 Greasemonkey 中的一个错误。根据 Mozilla 的 COW 界面,在Greasemonkey 的xmlhttprequester.js源代码中,abort没有正确公开

相关代码

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. 为 GM_xmlhttpRequest 提供 abort()
  2. GM_xmlhttpRequest response.responseText 在...中未定义
  3. 使用暴露道具

修补代码修复了错误。

你可以:

  1. Fork Greasemonkey 代码,并使用您自己的版本(推荐)。
    和/或
  2. 提交错误报告
于 2013-01-06T20:07:02.290 回答