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

时间:2010-09-03 13:14:35

标签: 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()删除了注释 1

如果可以避免,我不想在<><![CDATA[ ]><>中包装标题块,并且我希望尽可能避免在注释之外复制标题块。

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

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

2 个答案:

答案 0 :(得分:1)

Javascript引擎会忽略评论,唯一的方法就是对进程<script>的{​​{1}}进行字符串处理,或者对innerHTML请求进行字符串处理以获取AJAX文件,如果它是外部文件。

答案 1 :(得分:1)

Greasemonkey脚本目前还没有很好的方法来了解它自己的元数据(或注释)。这就是每个“autoupdate”脚本(like this one)要求您设置额外变量以便脚本知道其当前版本的原因。

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

然而,有一个技巧可能适合你。您可以将您自己的GM脚本作为资源读取,然后解析该源。

例如:

  1. 假设您的脚本名为MyTotallyKickassScript.user.js

  2. 现在向脚本的metadata block添加resource指令,如下所示:
    // @resource MeMyself MyTotallyKickassScript.user.js
    请注意,该文件没有路径信息,GM将使用相对路径复制资源,一次,当脚本首次安装时。

  3. 然后您可以使用GM_getResourceText()访问脚本的代码,如下所示:

    var ThisFileSource = GM_getResourceText ("MeMyself");  
    //Optional for Firebug users: console.log (ThisFileSource);
    
  4. 您可以解析ThisFileSource以获得所需的评论。

  5. A script that parses Greasemonkey metadata from a source file is here。你应该能够轻松地调整它。