Greasemonkey @grant 不再工作了?

Greasemonkey @grant does not work anymore?

我有以下 Greasemonkey 脚本,它试图读取资源文本:

// ==UserScript==
// @name        Test
// @namespace   test
// @version     1
// @grant       GM_getResourceText
// @resource    testresource http://whosebug.com/
// ==/UserScript==

var text = GM_getResourceText('testresource');

几周前我尝试过类似的方法并且成功了。 现在我运行这个的时候,GM_getResourceText找不到:

/*
Exception: ReferenceError: GM_getResourceText is not defined
@Scratchpad/7:9:5
*/

我在 Firefox 37.0.2 上安装了 Greasemonkey 3.1。 有没有其他人遇到同样的问题and/or知道哪里出了问题吗?

该代码不应给出该错误,并且 GM_getResourceText() 在 Firefox 37.0.2 和 Greasemonkey 3.1 上对我来说仍然可以正常工作。

确保您正在编辑和保存脚本的正确副本。参见 How do I edit a script I'm working on?

当您查看浏览器控制台时,该代码 应该 给出如下错误:

: Component returned failure code: 0x805e0006 [nsIWebNavigation.loadURI] browser.js:10592:0
TypeError: aDefault is undefined

严格来说,这是 Greasemonkey 代码中的错误。

然而,这也不是 @resource 通常使用的方式。通常,您只需加载一个特定的 和静态 文件。 @resource 用于 CSS、图像、XML 等文件...不是不断变化的应用程序路径。


如果您确实想要将此类站点的快照作为资源,请将页面(在您的示例中为 https://whosebug.com/)保存到与 *.user.js 文件相同的文件夹中,并使用 .htm 扩展(非常重要)和 @resource that.

所以,这个脚本工作得很好:

// ==UserScript==
// @name        _Test
// @include     http://YOUR_SERVER.COM/YOUR_PATH/*
// @grant       GM_getResourceText
// @resource    testresource Stack_Overflow.htm
// ==/UserScript==

var text = GM_getResourceText ('testresource');
console.log (text);

之后,您已将 https://whosebug.com/ 另存为 Stack_Overflow.htm 在脚本的安装目录中。