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.js
reference以上是关于ReferenceError: GM_xmlhttpRequest 未定义的主要内容,如果未能解决你的问题,请参考以下文章
JavaScript Uncaught ReferenceError: jQuery is not defined;未捕获的 ReferenceError:$ 未定义 [重复]