function blah(_x)
{
console.info(_x.toSource().match(/\/\/\s*@version\s+(.*)\s*\n/i));
}
function foobar()
{
// ==UserScript==
// @version 1.2.3.4
// ==/UserScript==
blah(arguments.callee);
}
foobar();
有没有办法使用JavaScript?我想检测Greasemonkey脚本中的版本号/其他属性,但据我了解,.toSource()
和.toString()
删除了注释 1 。
如果可以避免,我不想在<><![CDATA[ ]><>
中包装标题块,并且我希望尽可能避免在注释之外复制标题块。
这可能吗?是否有toSource()
/ .toString()
的替代方案可以实现这一目标?
答案 0 :(得分:1)
Javascript引擎会忽略评论,唯一的方法就是对进程<script>
的{{1}}进行字符串处理,或者对innerHTML
请求进行字符串处理以获取AJAX
文件,如果它是外部文件。
答案 1 :(得分:1)
Greasemonkey脚本目前还没有很好的方法来了解它自己的元数据(或注释)。这就是每个“autoupdate”脚本(like this one)要求您设置额外变量以便脚本知道其当前版本的原因。
正如aularon所说,从JS函数获取注释的唯一方法是解析<script>
标记或文件的源HTML。
然而,有一个技巧可能适合你。您可以将您自己的GM脚本作为资源读取,然后解析该源。
例如:
假设您的脚本名为MyTotallyKickassScript.user.js
。
现在向脚本的metadata block添加resource
指令,如下所示:
// @resource MeMyself MyTotallyKickassScript.user.js
请注意,该文件没有路径信息,GM将使用相对路径复制资源,一次,当脚本首次安装时。
然后您可以使用GM_getResourceText()
访问脚本的代码,如下所示:
var ThisFileSource = GM_getResourceText ("MeMyself");
//Optional for Firebug users: console.log (ThisFileSource);
您可以解析ThisFileSource
以获得所需的评论。
A script that parses Greasemonkey metadata from a source file is here。你应该能够轻松地调整它。