Вспомогательные команды

Eval

Команда eval предназначена для выполнение кода написаннного на других языках программирования (в данный момент поддерживается только JavaScript (ES5)). Она может выполняться только в контексте блока, поскольку работает с регистром. Однако команда может не только возвращать значение в регистр, но и присваивать значения переменных в JS переменным диггера. Благодаря этому можно получать сразу несколько значений различного толка в пределах одного выполнения. Если ваш JS фрагмент будет работать слишком долго, он будет автоматически прерван. Это сделано для избежания нецелевого использования данного функционала.

Примеры записи:

          # ВОЗВРАТ ЗНАЧЕНИЯ В РЕГИСТР
# ОБРАТИТЕ ВНИМАНИЕ ЧТО В ТАКОМ СЛУЧАЕ
# JS КОД ДОЛЖЕН БЫТЬ ОБЕРНУТ В ЗАМЫКАНИЕ И ВОЗВРАЩАТЬ ЗНАЧЕНИЕ
- eval:
    routine: js
    body: "(function (){return new Date().getTime();})();"
            
          # ПРИСВАИВАНИЕ ЗНАЧЕНИЕ ПЕРЕМЕННОЙ ДИГГЕРА `time` ИЗ ПЕРЕМЕННОЙ JS КОДА `jstime`
- eval:
    routine: js
    body: "var jstime = new Date().getTime();"
    assign:
        time: jstime
            

Примеры использования:

              - find:
    path: body
    do:
    # ВЫПОЛНИМ JS КОД КОТОРЫЙ ВОЗВРАЩАЕТ ТЕКУЩУЮ ДАТУ\ВРЕМЯ В UNIX ФОРМАТЕ
    - eval:
        routine: js
        body: "(function (){return new Date().getTime();})();"
        # В РЕГИСТРЕ НАХОДИТСЯ: 1476403635606
                
              - find:
    path: body
    do:
    # ВЫПОЛНИМ JS КОД КОТОРЫЙ ПРИСВАИВАЕТ ТЕКУЩУЮ ДАТУ\ВРЕМЯ В UNIX ФОРМАТЕ
    # В JS ПЕРЕМЕННУЮ `jstime` И ПРИСВОИМ ЕЕ ЗНАЧЕНИЕ ПЕРЕМЕННОЙ ДИГГЕРА `time`
    # КОЛИЧЕСТВО ПЕРЕМЕННЫХ КОТОРЫЕ МОЖНО ПРИСВОИТЬ НЕОГРАНИЧЕННО
    - eval:
        routine: js
        body: "var jstime = new Date().getTime();"
        assign:
            time: jstime
    - variable_get: time
    # В РЕГИСТРЕ НАХОДИТСЯ: 1476403635606
                

Так же можно использовать переменные диггера в коде JS.

Например:

          - find:
path: a
do:
- parse:
    attr: href
- variable_set: link
- eval:
    routine: js
    body: "(function (){return '<%link%>' + '?time=' + new Date().getTime();})();"
    # В РЕГИСТРЕ НАХОДИТСЯ: http://somelink.com/?time=1476403635606
    # ОБРАТИТЕ ВНИМАНИЕ, В ДАННОМ СЛУЧАЕ ЗНАЧЕНИЕ ПЕРЕМЕННОЙ ЗАКЛЮЧЕНО
    # В КАВЫЧКИ ДЛЯ ТОГО, ЧТО БЫ ИНТЕРПРЕТАТОР JS КОДА ЗНАЛ ЧТО ЭТО СТРОКА
            

В следующей главе мы рассмотрим команды, предназначенные для перезагрузки и перечитывания страниц.