Feststellen der Browserfunktionen
Aktualisiert: November 2007
Obwohl Browser die meisten JScript-Features unterstützen, werden die neuen Features für .NET Framework, d. h. klassenbasierte Objekte, Datentypen, Enumerationen, Direktiven für die bedingte Kompilierung und die const-Anweisung, nur serverseitig unterstützt. Daher sollten Sie diese Features ausschließlich in serverseitigen Skripts verwenden. Weitere Informationen finden Sie unter JScript-Versionsinformationen.
Ein JScript-Skript kann die Funktionen des Moduls ermitteln, von dem es interpretiert oder kompiliert wird. Dies ist unnötig, wenn Sie Code für eine serverseitige Anwendung (die in ASP oder ASP.NET ausgeführt werden soll) oder ein Befehlszeilenprogramm schreiben, da Sie die unterstützte JScript-Version und den Code mühelos herausfinden können. Beim Ausführen con clientseitigen Skripts in einem Browser ist es jedoch wichtig, dies herauszufinden, um sicherzustellen, dass das Skript mit dem JScript-Modul im Browser kompatibel ist.
Es gibt zwei Möglichkeiten, die Kompatibilität mit JScript zu untersuchen: entweder durch Verwenden der Skriptmodulfunktionen oder durch bedingte Kompilierung. Beide Vorgehensweisen haben Vorteile.
Skriptmodulfunktionen
Die Skriptmodulfunktionen (ScriptEngine, ScriptEngineBuildVersion, ScriptEngineMajorVersion, ScriptEngineMinorVersion) geben Informationen über die aktuelle Version des Skriptmoduls zurück. Weitere Informationen finden Sie unter Funktionen (JScript).
Um Kompatibilität zu gewährleisten, sollten nur Features, die in JScript, Version 1, verfügbar sind, auf einer Seite verwendet werden, die die unterstützten JScript-Versionen überprüft. Wenn ein Modul eine höhere Version von JScript als 1.0 unterstützt, können Sie auf eine andere Seite umleiten, die die erweiterten Features enthält. Das bedeutet, dass Sie für jede Webseite eine eigene Version für jede Version von JScript benötigen, die unterstützt werden soll. In den meisten Fällen ist es am effizientesten, nur zwei Seiten zu verwenden: eine für eine bestimmte Version von JScript und eine für die Verwendung ohne JScript.
Hinweis: |
---|
JScript-Code, in dem erweiterte Features verwendet werden, muss in einer separaten Seite platziert werden, die nicht von Browsern mit inkompatiblen Modulen ausgeführt wird. Dies ist unbedingt erforderlich, da das Skriptmodul eines Browsers den gesamten auf einer Seite vorhandenen JScript-Code interpretiert. Eine if…else-Anweisung zum Wechseln zwischen einem Codeblock, in dem die neueste Version von JScript verwendet wird, und einem Block mit Code in JScript, Version 1, funktioniert bei älteren Modulen nicht. |
Das folgende Beispiel veranschaulicht die Verwendung der Skriptmodulfunktionen. Da diese Funktione mit JScript, Version 2.0, eingeführt wurden, müssen Sie zuerst feststellen, ob das Modul diese Funktionen unterstützt, bevor Sie sie verwenden. Wenn das Modul nur JScript, Version 1.0, unterstützt oder JScript nicht erkennt, gibt der typeof-Operator für jeden Funktionsnamen die Zeichenfolge undefined zurück.
if("undefined" == typeof ScriptEngine) {
// This code is run if the script engine does not support
// the script engine functions.
var version = 1;
} else {
var version = ScriptEngineMajorVersion();
}
// Display the version of the script engine.
alert("Engine supports JScript version " + version);
// Use the version information to choose a page.
if(version >= 5) {
// Send engines compatible with JScript 5.0 and better to one page.
var newPage = "webpageV5.htm";
} else {
// Send engines that do not interpret JScript 5.0 to another page.
var newPage = "webpagePre5.htm";
}
location.replace(newPage);
Bedingte Kompilierung
Variablen und Anweisungen für die bedingte Kompilierung können JScript-Code für Module ausblenden, die keine bedingte Kompilierung unterstützen. Diese Vorgehensweise empfiehlt sich, wenn Sie einen kleinen Abschnitt alternativen Code direkt in die Webseite einfügen möchten.
Hinweis: |
---|
Verwenden Sie keine mehrzeiligen Kommentare innerhalb der Blöcke für die bedingte Kompilierung, da diese von Modulen, die keine bedingte Kompilierung unterstützen, fehlinterpretiert werden können. |
<script>
/*@cc_on
@if(@_jscript_version >= 5 )
// Can use JScript Version 5 features such as the for...in statement.
// Initialize an object with an object literal.
var obj = {"a" : "Athens" , "b" : "Belgrade", "c" : "Cairo"};
var key;
// Iterate the properties.
for (key in obj) {
document.write("The "+key+" property has value "+obj[key]+".<BR>");
}
@else
@*/
alert("Engine cannot interpret JScript Version 5 code.");
//@end
</script>
Wenn der bedingte @if-Block viel Code enthält, kann es einfacher sein, die obige Vorgehensweise für die Verwendung der Skriptmodulfunktionen anzuwenden.