javascript – 解析Greasemonkey元数据和/或从函数中获取注释

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()删除了comments1.

我不想在<><![CDATA []><>中包装标题块如果我可以避免它,我想避免在可能的情况下在注释之外复制标题块.

这可能吗?是否有替代toSource()/ .toString()可以实现这一目标?

[1] – http://isc.sans.edu/diary.html?storyid=3231

最佳答案 目前,Greasemonkey脚本还没有很好的方法来了解它自己的元数据(或注释).这就是为什么每个“autoupdate”脚本(
like this one)都要求您设置额外的变量,以便脚本知道它的当前版本.

正如aularon所说,从JS函数获取注释的唯一方法是解析< script>的源HTML.标签或文件.

但是,有一个技巧可能对你有用.您可以将自己的GM脚本作为资源读取,然后解析该源.

例如:

>假设您的脚本名为MyTotallyKickassScript.user.js.
>现在将一个资源指令添加到脚本的metadata block中,如下所示:
// @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.你应该能够轻松地适应它.

点赞