Анализировать метаданные Greasemonkey и / или получать комментарии внутри функции - PullRequest
4 голосов
/ 03 сентября 2010
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 ]

1 голос
/ 04 сентября 2010

В настоящее время для скрипта Greasemonkey нет действительно хорошего способа узнать свои собственные метаданные (или комментарии).Вот почему каждый скрипт «autooupdate» (, как этот ) требует, чтобы вы устанавливали дополнительные переменные, чтобы скрипт знал свою текущую версию.

Как сказал aularon, единственный способ получитькомментарии из функции JS предназначены для анализа исходного HTML-кода тега <script> или файла.

Однако, есть прием , который может работать для вас.Вы можете прочитать свой собственный скрипт GM как ресурс и затем проанализировать этот источник.

Например:

  1. Предположим, ваш скрипт был назван MyTotallyKickassScript.user.js.

  2. Теперь добавьте директиву resource к блоку метаданных вашего скрипта примерно так:
    // @resource MeMyself MyTotallyKickassScript.user.js
    Обратите внимание, что нетИнформация о пути к файлу, GM будет использовать относительный путь для копирования ресурса, один раз, когда скрипт first установлен.

  3. Затем вы можете получить доступ кКод сценария, используя GM_getResourceText(), например:

    var ThisFileSource = GM_getResourceText ("MeMyself");  
    //Optional for Firebug users: console.log (ThisFileSource);
    
  4. Вы можете проанализировать ThisFileSource, чтобы получить нужные комментарии.

  5. Сценарий, который анализирует метаданные Greasemonkey из исходного файла, находится здесь .Вы должны быть в состоянии адаптировать его без особых усилий.

1 голос
/ 03 сентября 2010

Javascript engine будет игнорировать комментарии, единственный способ сделать это - обработать строку <script> innerHTML или обработать строку AJAX запросом, который выбирает файл .js, если это был внешний файл.

...