2013-10-24 12 views
11

Wer weiß, welche Version von JavaScript von HTA-Dateien verwendet wird.JavaScript-Version in HTA

Derzeit einige Script-Dateien erstellen - und versuchen, die Verwendung von Object.defineProperty

Bei der Ausführung als HTA zu machen - es Fehler, dass das Objekt unter Angabe nicht diese Eigenschaft oder Methode unterstützen. Ich habe es als HTM-Datei nur zur Überprüfung ausgeführt - und es gibt überhaupt kein Problem.

Also kann ich nur annehmen, dass mshta.exe eine ältere JavaScript-Engine verwendet. Kann das jemand bestätigen?

Antwort

14

Die verwendete JavaScript-Version (oder JScript-Version) hängt von drei Dingen ab: installierte Interner Explorer-Version, verwendete Dokumenttypdeklaration (DTD) und x-ua-compatible Meta-Tag.

Obwohl HTAs von mshta.exe ausgeführt werden, stellt der IE die JavaScript- und Rendering-Engines für Anwendungen bereit, daher steht später alles über JS-Versionen, Box-Modelle, Positionierung, CSS usw. und verfügbare APIs und HTML-Elemente. Wenn Sie IE11 in Ihrem System installiert haben, können Sie die neueste Version von JavaScript verwenden, indem Sie <!DOCTYPE html> und <meta http-equiv="x-ua-compatible" content="ie=edge" /> verwenden.

Natürlich wird durch das Setzen der content auf IE=edge eine alte Version des installierten IE nicht überschrieben, es wird der neueste verfügbare Modus verwendet. Anstelle von edge können Sie IE-Versionsnummern verwenden, um die App zu downgraden, wenn sie mit neueren IEs ausgeführt wird.

Wenn DTD weggelassen wird, sollte die Anwendung immer im Quirks-Modus ausgeführt werden, was im Fall von HTA mit IE5 vergleichbar ist. In diesem Fall kann der Dokumentmodus jedoch mit x-ua-compatible geändert werden, aber zumindest in IE8 gab es einige Inkonsistenzen. 9. Es ist immer am sichersten, DTD zu verwenden, wenn der Quirks-Modus nicht benötigt wird.

Mit DTD, aber ohne x-ua-compatible Meta-Tag HTAs werden im IE7-Standards-Modus ausgeführt (die object.defineProperty() nicht unterstützt, ist es in IE9 eingeführt).

Sie können mehr über das Thema auf MSDN lesen: Introduction to HTML Applications (HTAs)

IE-Version Info für JS und CSS kann auf MSDN finden:

JavaScript version information

CSS Compatibility in Internet Explorer

Hier sind ein „sichere Starten Sie "für eine HTA-Datei, wenn Sie die neueste verfügbare Version verwenden möchten:

<!DOCTYPE html> 
<html> 
<head> 
<title>HTA</title> 
<meta http-equiv="x-ua-compatible" content="ie=edge" /> 
// All link, style and script tags, or any code should be placed below the five lines above 

Sie auch ScriptEngine Funktionen verwenden können, die neueste Skriptversion, um herauszufinden:

ver = ScriptEngine() + ' V '; 
ver += ScriptEngineMajorVersion() + '.'; 
ver += ScriptEngineMinorVersion() + '.'; 
ver += ScriptEngineBuildVersion(); 
alert(ver); 

Beachten Sie, dass dies nur die neueste Version von Browser, Dokumentenmodus haben eine auf die zurückgegebenen Werte beeinflussen nicht vorgesehen zeigt .

+2

Immer wenn ich das Meta-Tag verwende, funktionieren meine hta: -Anwendungseigenschaften nicht. Wenn ich es kommentiere, tun sie es. Gibt es eine Lösung? – ndm13

+2

Leider habe ich keine gute Lösung dafür.Seit IE10 scheint es, dass viele HTA-Eigenschaften nicht mehr angewendet werden (im geparsten Code wird das 'HTA'-Tag nach' body' verschoben). In IE9 scheinen sie immer noch respektiert zu werden. Ich habe meistens 'IE = 9' anstelle von' IE = edge' verwendet, was zumindest moderne Event-Handhabung und die meisten HTML5-Tags, einschließlich 'svg' und' canvas', liefert. – Teemu

+2

'IE = 9' funktioniert perfekt! Ich hoffe, dass dies zu einem bestimmten Zeitpunkt behoben ist, aber es ist zweifelhaft, wie sie dies auslaufen scheinen. Ich wäre nicht überrascht, wenn die nächste Version von Windows HTA-Dateien nicht unterstützt. – ndm13

Verwandte Themen