Greasemonkey命名空间有什么作用?

93

我正在学习如何使用Greasemonkey,想知道@namespace元数据ID的作用。

它必须是一个网址吗?还是可以是我电脑上的文件夹/目录?

它是否需要填写?

4个回答

90

命名空间用于避免名称冲突。如果你的脚本被命名为foobar,而其他人也这样做了,那么中央仓库将很难区分它们。

因此,您应该提供一些 URL,您可以控制它(即您拥有它或者可以进行管理),基本上意味着“所有该URL下的内容都是由我创作的”。现在,这些中央仓库可以区分来自http://somesite.com/http://anothersite.comfoobar了。

如果想分享您的脚本,则不是基本操作所必需的,但强烈建议这样做。

请记住,mailto:someone@example.com也是一个有效的 URL,当您没有拥有或控制自己的域时可能是一个可能的选择。


6
根据这个维基页面的说法:“虽然名称空间是非语义化的,但通常使用URL。”因此,它不一定是一个URL,但拥有自己的URL是确保该值唯一的简单方法。 - Joachim Sauer
谢谢。我经常购买域名,使用一段时间后就放弃它们。我甚至在决定非 URL 命名空间时也有同样的问题,比如在 .NET API 中 - 但这是一个不同的问题,并不像编造一个你没有拥有但认为可能是“安全”的 URL 那么棘手。再次感谢。 - Grant Thomas
3
你可以使用你的电子邮件地址(或者甚至是一个mailto: URI,如果你想将其变成一个URL)作为例子。 - Joachim Sauer
1
@Joachim Sauer 当我尝试使用新的命名空间保存脚本时,Greasyfork警告了我,所以我取消了操作。好吧,那我就把它留在原地。感谢您的回答。 - Christhofer Natalius
1
@AdamSpiers:既然TamperMonkey可以安装相同的脚本,我就这么认为。 - Joachim Sauer
显示剩余4条评论

22

命名空间的一个实际应用场景是存储首选项。命名空间用于为任何特定脚本的存储首选项唯一标识脚本。

例如,如果你有这样的一个脚本:

// ==UserScript==
// @name            Script Name
// @namespace       http://example.com
// @include         *
// ==/UserScript==


GM_setValue("key", "value");

这将被存储在您的首选项中(可以在prefs.js和about:config中访问),格式如下:

greasemonkey.scriptvals.http://example.com/Script Name.key

请注意格式:greasemonkey.scriptvals . 命名空间 . 脚本名称 . 键/变量名称


啊,我发现你在@include行中使用的'*'非常有帮助,谢谢。 - Adam Fowler
谢谢。我猜TamperMonkey也是类似的情况,有人能确认一下吗? - Adam Spiers

10

一般来说,命名空间是一个抽象容器,为其中包含的项目(名称、技术术语或单词)提供上下文,并允许消除具有相同名称(位于不同命名空间中)的项目之间的歧义。

来源:命名空间 - 维基百科

更具体地说:

这是一个URL,Greasemonkey使用它来区分由不同作者编写但名称相同的用户脚本。 如果您拥有域名,则可以将其(或其子目录)用作命名空间。 否则,您可以使用tag: URI。

@namespace是可选的。 如果存在,它只能出现一次。 如果不存在,则默认为用户下载用户脚本的域。

来源:Dive Into Greasemonkey-元数据


失效链接:http://diveintogreasemonkey.org/helloworld/metadata.html(深入浅出 Greasemonkey - 元数据) - Awaaaaarghhh
网络存档:https://web.archive.org/web/20081219012207/http://diveintogreasemonkey.org/helloworld/metadata.html - Petru Zaharia

1

命名空间可以是一个URL,但不仅限于此。您可以使用一些词作为命名空间,例如您的用户名或真实姓名。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接