2013-10-24 85 views
11

有誰知道HTA文件使用的是什麼版本的JavaScript。HTA中的JavaScript版本

目前創造了一些腳本文件 - 並試圖利用Object.defineProperty

當作爲HTA運行 - 它的錯誤,指出對象不支持此屬性或方法。我已經將它作爲一個HTM文件運行來檢查 - 並且完全沒有問題。

所以我只能假設mshta.exe正在使用舊的JavaScript引擎。任何人都可以證實這一點?

回答

14

使用的JavaScript(或JScript)版本取決於三件事:安裝了Interner Explorer版本,使用的文檔類型聲明(DTD)和x-ua-compatible元標記。

儘管HTA是由mshta.exe運行的,但IE爲應用程序提供了JavaScript和渲染引擎,因此稍後會介紹JS版本,代表箱式模型,定位,CSS等,以及可用的API和HTML元素。

如果您的系統中安裝了IE11,則可以使用<!DOCTYPE html><meta http-equiv="x-ua-compatible" content="ie=edge" />的最新版本的JavaScript。

當然,將content設置爲IE=edge不會覆蓋安裝的IE的舊版本,因此會使用最新的可用模式。使用IE版本號代替edge時,可以使用IE版本號來降級應用程序,並使用較新的IE進行運行。

省略DTD應該總是放棄應用程序以Quirks模式運行,在HTA情況下它與IE5類似。但是,在這種情況下,文檔模式可以使用x-ua-compatible進行更改,但至少在IE8中存在一些不一致之處。如果不需要Quirks模式,則使用DTD總是最安全的。

使用DTD,但沒有x-ua-compatible元標記HTA在IE7標準模式下運行(不支持object.defineProperty(),它在IE9中引入)。

您可以在MSDN瞭解更多有關的主題:Introduction to HTML Applications (HTAs)

的JS和CSS IE的版本信息,可以在MSDN中找到:

JavaScript version information

CSS Compatibility in Internet Explorer

這裏有一個「安全開始「的HTA文件,當你想使用最新的可用版本:

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

您還可以使用ScriptEngine功能,找出最新的腳本版本:

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

請注意,這僅顯示通過瀏覽器提供的最新版本,文件模式不具有影響到返回的值。

+2

每當我使用元標記,我的hta:應用程序屬性不起作用。如果我將它評論出來,那麼他們會這麼做有解決方案嗎? – ndm13

+2

不幸的是,我沒有一個很好的解決方案。從IE10開始,似乎許多HTA屬性不再被應用(在解析後的代碼中,HTA標籤被移動到了「body」)。在IE9中,他們似乎仍然受到尊重。我主要使用'IE = 9'而不是'IE = edge',它至少提供了現代事件處理和大部分HTML5標記,包括'svg'和'canvas'。 – Teemu

+2

'IE = 9'完美無缺!我希望這一點在某些時候是固定的,但它似乎正在逐步淘汰這一點,這是值得懷疑的。如果下一個版本的Windows不支持HTA文件,我不會感到驚訝。 – ndm13