Share via


偵測瀏覽器功能

雖然瀏覽器支援 JScript 大部分的功能,但是只有伺服器端支援用於 .NET Framework、類別架構物件、資料型別、列舉型別、條件式編譯指示詞以及 const 陳述式的新功能。 因此,您應該只在伺服器端的指令碼內使用這些功能。 如需詳細資訊,請參閱 JScript 版本資訊

JScript 指令碼可以偵測對本身進行解譯或編譯之引擎的功能。 當您為伺服器端的應用程式 (在 ASP 或 ASP.NET 上執行) 或命令列程式撰寫程式碼時,並不需要這項偵測,因為您可以輕易找出支援的 JScript 版本和相關程式碼。 但是在瀏覽器中執行用戶端上的指令碼時,這項偵測能夠確保指令碼與瀏覽器中的 JScript 引擎相容,因此十分重要。

JScript 的相容性有二種檢查方式,一是使用指令碼引擎函式,一是使用條件式編譯。 二種方式,各有所長。

指令碼引擎函式

指令碼引擎函式 (ScriptEngineScriptEngineBuildVersionScriptEngineMajorVersionScriptEngineMinorVersion) 會傳回目前指令碼引擎版本的相關資訊。 如需詳細資訊,請參閱 函式 (Visual Studio - JScript)

為了得到最高的相容性,您應該在支援的 JScript 版本檢查頁面中,只使用在 JScript 1 版中找到的功能。 如果引擎支援的 JScript 版本比 1.0 還新,您可以重新導向至有進階功能的頁面。 這表示您要支援的每個 JScript 版本,必須有各自的 Web 網頁版本。 在大多數情況下,最有效的解決方式是只準備兩個頁面,一個專門為 JScript 的特殊版本而設計,另一個則是為不使用 JScript 而設計。

注意事項注意事項

使用進階功能的 JScript 程式碼,必須另外放在瀏覽器不會以不相容的引擎執行的頁面中。 這是絕對必要的,因為瀏覽器的指令碼引擎會解譯頁面中所有的 JScript 程式碼。 在較舊的引擎上,無法使用 if…else 陳述式在使用新版 JScript 的區塊和 JScript 1 版程式碼的區塊之間切換。

下面的範例說明指令碼引擎函式的用法。 這些函式是在 JScript 2.0 版中介紹的,因此使用之前您必須先瞭解引擎是否支援這些函式。 如果引擎只支援 JScript 1.0 版或是無法辨別 JScript,typeof 運算子會對每個函式名稱傳回 "undefined" 字串。

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

條件式編譯

條件式編譯變數和陳述式可以向不支援條件式編譯的引擎隱藏 JScript 程式碼。 如果您想直接在 Web 網頁中放入少量的替代程式碼,可以使用這個方法。

注意事項注意事項

請不要在條件式編譯區塊中使用多行註解,因為不支援條件式編譯的引擎可能會錯誤解譯註解。

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

如果條件式 @if 區塊中有許多程式碼,您不妨採用前述指令碼引擎函式的使用方法。

請參閱

概念

JScript 版本資訊

其他資源

撰寫、編譯和偵錯 JScript 程式碼

函式 (Visual Studio - JScript)

條件式編譯