ReferenceError: GM_xmlhttpRequest 未定义

Posted

技术标签:

【中文标题】ReferenceError: GM_xmlhttpRequest 未定义【英文标题】:ReferenceError: GM_xmlhttpRequest is not defined 【发布时间】:2013-05-20 03:14:00 【问题描述】:

我在以下用户脚本代码中得到一个 ReferenceError:

// ==UserScript==
// @name          ...
// @namespace     ...
// @description   ...
// @include       ...
// @grant         GM_xmlhttpRequest
// ==/UserScript==

console.log(GM_info);
try

    console.log(GM_xmlhttpRequest( method: "GET", url: "http://google.ca/", synchronous: true ).readyState);

catch (e)

    console.log(e);

...

它首先成功记录GM_info,然后记录ReferenceError。 (我使用的是 Firefox/Firebug。)

为什么会出现这个错误?

【问题讨论】:

无法复制。你的规格是什么? (操作系统、FF 版本、GM 版本等)这很可能是由于元数据块无效。 Win7 SP1 x64,FF 21.0,GM 1.9。元数据块来自this file,仅修改了@grant 在同一系统上测试(少 SP1)。没有发现问题。您的元数据块是否有前导空格?文件是否以除 ANSI 或 UTF 之外的任何方式编码?粘贴复制问题的 exact 脚本。从this answer 执行第 4 步。 重新安装脚本修复了它。 【参考方案1】:

重新安装脚本解决了这个问题。我不需要重新启动 Firefox,但它可能对其他人有帮助。 Brock's answer 为此类问题提供了有用的调试提示。

【讨论】:

【参考方案2】:

我遇到了同样的问题,为我解决的问题是在顶部添加这个:

// @grant        GM_xmlhttpRequest

【讨论】:

【参考方案3】:

从新闻版本(GM 4.0)开始,当您使用GM_xmlhttpRequest 时出现此错误,因为GM_xmlhttpRequest 被替换为:GM.xmlHttpRequest

新代码是:

// ==UserScript==
// @name          ...
// @namespace     ...
// @description   ...
// @include       ...
// @grant         GM.xmlHttpRequest
// ==/UserScript==

console.log(GM_info);
try

    console.log(GM.xmlHttpRequest( method: "GET", url: "http://google.ca/", synchronous: true ).readyState);

catch (e)

    console.log(e);

//...

Greasemonkey: "GM_xmlhttpRequest is not defined" with the new update

【讨论】:

应该保持向后兼容性。绝对愚蠢的变化。 GM 对象的方法是异步的(与包含“_”的函数相反)。他们不会减慢页面速度。有时,如果不打破其他东西,就没有进步。以新的方式制作新脚本,因为 GM 提供了快速修复的旧脚本。只需添加:// @require https://greasemonkey.github.io/gm4-polyfill/gm4-polyfill.jsreference

以上是关于ReferenceError: GM_xmlhttpRequest 未定义的主要内容,如果未能解决你的问题,请参考以下文章

ReferenceError:未定义 DartObject

ReferenceError:未定义提取

Rails:ReferenceError:未定义谷歌

ReferenceError:变量未定义

JavaScript Uncaught ReferenceError: jQuery is not defined;未捕获的 ReferenceError:$ 未定义 [重复]

ReferenceError:找不到变量