2016-04-09 5 views
3

Ich führe Javascript im Windows Script Host aus, es ist also kein Browser beteiligt.Get Versionsbeschreibung der js-Ausführungsumgebung

Wie identifiziere ich aus dem Skript, welche Version von JavaScript seine Ausführungsumgebung, WSH, unterstützt? Für diejenigen, die mit WSH nicht vertraut sind, benötigt es als Eingabe ein "rohes" JavaScript-Skript, d. H. Eines ohne umgebende <script> Tags, wie sie HTML-eingebettete Skripte hätten. Afaik WSH übergibt das Skript direkt an seine registrierte JavaScript-Engine (JScript.Dll) zur Ausführung und es ist überhaupt kein Browser beteiligt.

Googling scheint nur Methoden zu starten, die voraussetzen, dass das Skript in einem Browser ausgeführt wird, was bei einem in WSH ausgeführten Skript nicht der Fall ist.

+2

Sie Verlesen das Buch: die Variablen manuell früher im Code definiert sind. In jedem Fall wurde die 4. Ausgabe vor 15 Jahren veröffentlicht, und der Code erkennt JS-Versionen, die längst veraltet sind. – JJJ

+0

"manuell früher definiert", da Sie das Buch zu haben scheinen, könnten Sie genau angeben, wo? Vielleicht ist mein Sehvermögen nicht das, was es war. Tks ... – MartynA

+0

Ich habe das E-Buch, also weiß ich nicht, über welches Code-Snippet du genau sprichst, aber jedes Beispiel, das '_version' oder' _js12_' verwendet, beginnt mit etwas wie ' '(was in modernen Umgebungen nicht funktioniert). – JJJ

Antwort

2

Werfen Sie einen Blick auf einige WSH integrierten Eigenschaften im folgenden Beispiel:

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); 

Der Code gibt Ausgang für mich:

WScript.Version = 5,8
WScript.BuildVersion = 18283
Scriptengine = 5
Scriptengineminor = 8
ScriptEngineBuildVersion = 18231
C: \ Windows \ System32 \ WScript.exe version = 5.8.7601.18283

Der Punkt ist, dass Sie WSH Version, die Art und Weise abrufen können (obwohl ich habe keine Ahnung, über den Unterschied in WScript.BuildVersion und ScriptEngineBuildVersion).

Es gibt WSH-Versionen 1.0, 2.0 (auch 5.1 genannt), 5.6, 5.7, 5.8 und 5.812 by the link. Сonsidering JScript-Version ist die gleiche wie WSH (außer JScript 5.1 ist für WSH 2.0, und vielleicht - Ich habe keinen Beweis gefunden - JScript 9.0 ist für WSH 5.812, seit JScript 9.0 mit IE 9 und später WSH 5.812 mit Windows 10 eingeführt) . Sie können JavaScript und JScript Versionen Korrespondenz durch die link 1 und link 2 finden.

Basierend auf, dass ich nehme an, die folgende Kompatibilität:

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

Das ist toll, danke. Eine kleine q, während ich dein Ohr habe: Dein Skript funktioniert einwandfrei, wenn ich es mit WScript ausführe.Exe über die Befehlszeile, aber wenn ich es in einem WSH-Fenster in meiner (Delphi) -App ausfühle, beschwert es sich, dass 'WScript' nicht definiert ist. Gibt es eine Möglichkeit, das zu beheben, damit es richtig läuft? – MartynA

+0

@MartynA, ein WScript-Objekt, das nur in der WSH-Skript-Engine verfügbar ist, kann es von anderen Engines auch über Emulation oder auf Basis von wscript.exe verwendet werden. Ich nehme an, dass Ihre Delphi-App eine eigene Skript-Engine-Implementierung ohne integrierte WScript-Unterstützung hat und auch über JavaScript verfügt. Daher sollte es eine andere Möglichkeit geben, die Engine-Version abzurufen. Wenn Sie beabsichtigen, WScript-Methoden zu verwenden, können Sie versuchen, die Temp.js-Datei innerhalb eines separaten wscript.exe-Prozesses zu starten und das WScript-Objekt von dort auf Ihre App zu übertragen, aber es ist ein langer Weg, der sich wahrscheinlich nicht lohnt. – omegastripes