2016-04-09 5 views
3

Я запускаю javascript в хосте Windows Script, поэтому никакого браузера не используется.Получить описание версии среды выполнения js

Как определить, изнутри скрипта, какая версия JavaScript, его среда исполнения, поддерживает WSH? Для тех, кто не знаком с WSH, в качестве входных данных используется «сырой» сценарий JavaScript, то есть один без каких-либо окружающих тегов <script>, поскольку скрипты, встроенные в HTML, будут иметь. Afaik WSH передает сценарий прямо на свой зарегистрированный движок javascript (JScript.Dll) для исполнения, и ни один браузер не задействован вообще.

Похоже, что только в googling появляются методы, которые предполагают, что скрипт выполняется в браузере, что не соответствует сценарию, выполняемому в WSH.

+2

Вы неправильно понимаете книгу: переменные определены вручную ранее в коде. В любом случае, 4-е издание было опубликовано 15 лет назад, и код обнаруживает версии JS, которые давно стали устаревшими. – JJJ

+0

«определяется вручную раньше», поскольку у вас, похоже, есть книга, не могли бы вы указать, где именно? Возможно, мое зрение не то, что было. Tks ... – MartynA

+0

У меня есть электронная книга, поэтому я не знаю, какой фрагмент кода вы говорите точно, но каждый пример, который использует '_version' или' _js12_', начинается с чего-то типа ' '(что не будет работать в современных условиях). – JJJ

ответ

2

Посмотрите на какой-то WSH встроенные свойства в следующем примере:

var fso = new ActiveXObject("Scripting.FileSystemObject"); 
var s = ''; 
s = s + 'WScript.Version = ' + WScript.Version + '\n'; 
s = s + 'WScript.BuildVersion = ' + WScript.BuildVersion + '\n'; 
s = s + 'ScriptEngineMajorVersion = ' + ScriptEngineMajorVersion() + '\n'; 
s = s + 'ScriptEngineMinorVersion = ' + ScriptEngineMinorVersion() + '\n'; 
s = s + 'ScriptEngineBuildVersion = ' + ScriptEngineBuildVersion() + '\n'; 
s = s + WScript.FullName + ' version = ' + fso.GetFileVersion(WScript.FullName) + '\n'; 
WScript.Echo(s); 

код дает выход для меня:

WScript.Version = 5,8
WScript.BuildVersion = 18283
ScriptEngineMajorVersion = 5
ScriptEngineMinorVersion = 8
ScriptEngineBuildVersion = 18231
C: \ Windows \ System32 \ WScript.exe версия = 5.8.7601.18283

Дело в том, вы можете получить WSH версии, что пути (хотя я понятия не имею, о разнице в WScript.BuildVersion и ScriptEngineBuildVersion).

Есть версии WSH 1.0, 2.0 (также называемые 5.1), 5.6, 5.7, 5.8 и 5.812 by the link. Рассмотрение JScript-версии такое же, как WSH (за исключением JScript 5.1 для WSH 2.0 и, возможно, - я не нашел никаких доказательств - JScript 9.0 для WSH 5.812, поскольку JScript 9.0 представлен с IE 9 и более поздними версиями WSH 5.812 с Windows 10) , Вы можете найти JavaScript и JScript соответствие версий link 1 и link 2.

Исходя из этого, я полагаю, следующую совместимость:

WSH  JavaScript 

1.0  1.0 
2.0  1.4 
5.5-5.8 1.5 
5.812  1.8.1 (needs to be checked) 
+0

Это большое спасибо. Один незначительный q, когда я прислушиваюсь: ваш скрипт отлично работает, если я запускаю его с помощью WScript.Exe из командной строки, но если я запустил его из окна WSH в моем приложении (Delphi), он жалуется, что 'WScript' не определен. Есть ли способ исправить это, чтобы он работал правильно? – MartynA

+0

@MartynA, объект WScript, доступный только в сценарии WSH, другие двигатели могут использовать его также посредством эмуляции или на основе wscript.exe. Я полагаю, что у вашего приложения Delphi есть собственная реализация скриптового движка без встроенной поддержки WScript, а также с его вкусом JavaScript. Таким образом, он должен иметь другой способ получить версию двигателя. Если вы намерены использовать любые методы WScript, вы можете попытаться запустить файл temp .js в отдельном процессе wscript.exe и перенести объект WScript в свое приложение из него, но это долгий путь и, вероятно, не стоит усилий. – omegastripes