Romul81
Advanced Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору В порядке полезной информации для расширения функциональности TP и, в частности, скриптинг-фильтра. Вкратце ситуация следующая. Фильтр может задействовать любой скриптовой язык, доступный через интерфейс WSH. Более развёрнутая информация в английской вики. Проблема заключается в том, что при использовании любых из следующих Script Language: - JScript
- JavaScript
- ECMAScript
задействуется встроенный JScript в версии 5.8 (по крайней мере в Win 8.1). Эта версия реализации MS соответствует ECMAScript 3 (ECMA-262 3rd edition / JavaScript 1.5), разработанная в лохматом 2000-м году. Да, даже в этой версии производительность несколько выше, чем у другого встроенного скриптового языка - VBScript. Но, если в системе есть IE 9+ и, соответственно, новый интерпретатор Chakra, то зачем платить больше? Новый движок на порядки быстрее и полностью поддерживает ES5 (ECMA-262 5th edition / JavaScript 1.8.1) плюс частично ES6. Не то, чтобы эти стандарты были так уж очень нужны, но, как уже было сказано, новый движок гораздо быстрее и плюс к тому, появляется поддержка таких удобных методов как forEach, indexOf, reduce и др. для массивов и такая базовая вещь как trim для String. OK, понятно, Chakra лучше. Но как задействовать? 1. Применить твик реестра из этого поста. Правда, в моём случае на двух машинах с Win 8.1 для первых двух ключей (ProgID) значения пришлось вносить вручную, предварительно пошаманив с правами на запись. Вкратце - сначала нужно добавить себя в Auditing, затем стать владельцем и задать полный доступ. После изменения вернуть всё взад (хотя, наверное, можно и не возвращать). 2. В TP в графе Script Language вместо JScript указать Chakra. В поле для кода поместить тестовый скрипт Проверить - нажать кнопку "Check Script". Если ОК - Chakra подключилась. Бинго! Теперь можно писать код обработки, совместимый с ES5. Добавлено: З.Ы. Есть ещё такая мулька как node-chakracore - форк Node.js на движке chakra с открытым исходным кодом (вместо V8). Полная поддержка ES6. Но по WSH недоступен. Подключается с помощью JSRT API, но так и не разобрался, как прикрутить. Инфа здесь. EDIT Практика, как известно, является критерием истины. И после тестирования методов ES5 в TP на практике выяснилось, что даже в случае использования движка Chakra эти самые методы не поддерживаются. Почему - непонятно. Немного теории. Все "родные" dll-ки, относящиеся к WSH в моей системе имеют версию 5.8.9600.16384. jscript.dll - библиотека, отвечающая за одноимённый скриптовый язык, той же версии, и соответствует, как говорилось выше ECMAScript-262 3rd edition / JavaScript 1.5. Путём вышеописанных манипуляций с реестром мы смогли задействовать более новый движок Chakra, завязанный на установленную в систему библиотеку jscript9.dll, которая не смотря на цифру 9 в своём названии имеет версию 11.00.9600.18347, которая в свою очередь, соответствует установленной версии Internet Explorer. Известно, что этот браузер начиная с 9-й версии поддерживает ES5. По крайней мере для 11-й это даже не обсуждается. При этом, по какой-то причине, при вызове по WSH новые методы не работают. Также, специально оговорюсь, что нет сомнений в том, что подключилась именно Chakra, т.к. выводил результат функций ScriptEngineMajorVersion() + ScriptEngineMajorVersion() + ScriptEngineBuildVersion() - всё верно, отрабатывает именно 11-я версия. Тем не менее не выходит каменный цветок (( Но в виду наличия здравой (в основном) настырности и нежелания "проигрывать", пришлось-таки найти выход. По мотивам этого поста (ахтунг! - японский) и с использованием кода из JScriptExtender в скрипт для TP был имплантирован ES5-shim, добавляющий те самые искомые методы. При этом JSON и "some additional functions" добавлять не стал за ненадобностью. Дополнительным бонусом такого решения является то, что шим можно использовать и со старой версией JScript, если кому в лом возиться с подключением Chakra - новые методы будут работать. Но, всё-таки Chakra лучше хотя бы потому, что быстрее в два раза. Запостил на pastebin код, чтоб не потерялось. Вычлененный ES5 Methods shim (src) Он же в сжатом виде (min). Код для подключения в TP с целью тестирования. В скрипте тестируются новые методы с выводом результата в alert. TextPipe JScript ES5 filter - скрипт шаблон, готовый для написания вашего кода обработки. Можно назначить по умолчанию для текущего скриптового языка, нажав кнопку "Set default". Повторюсь, использование Chakra факультативно. Еще, наверное, нужно отметить, что патчинг методов происходит только при первом запуске скрипта в рамках одной обработки ("job"). Т.е. не нужно переживать, что шим будет запускаться на каждой строке обрабатываемого текста. EDIT 2 Нашёл гораздо более компактный и, по всей видимости, более быстрый шим - augment.js. Для наших целей - то, что нужно. Новый шаблон для TP - TextPipe JScript ES5-augment filter | Всего записей: 1329 | Зарегистр. 03-03-2008 | Отправлено: 12:41 06-07-2017 | Исправлено: Romul81, 02:11 08-07-2017 |
|