2013-10-29 26 views
0

我最近为使用Visual Studio的相对复杂的模拟引擎创建了一个TypeScript项目,默认情况下,它是目标ECMAScript 3(ES3)。我想开始我的打字稿类中使用的不动产,所以我更新了我的项目文件到目标ES5,就像这样:TypeScript - 对象不支持属性或方法'defineProperty'

<PropertyGroup Condition="'$(Configuration)' == 'Debug'"> 
    <TypeScriptTarget>ES5</TypeScriptTarget> 
    <TypeScriptRemoveComments>false</TypeScriptRemoveComments> 
    <TypeScriptSourceMap>true</TypeScriptSourceMap> 
    <TypeScriptModuleKind>AMD</TypeScriptModuleKind> 
</PropertyGroup> 
<PropertyGroup Condition="'$(Configuration)' == 'Release'"> 
    <TypeScriptTarget>ES5</TypeScriptTarget> 
    <TypeScriptRemoveComments>true</TypeScriptRemoveComments> 
    <TypeScriptSourceMap>false</TypeScriptSourceMap> 
    <TypeScriptModuleKind>AMD</TypeScriptModuleKind> 
</PropertyGroup> 

现在,当我在IE(V10)运行我的申请,我得到一个运行时异常:“0x800a01b6 - JavaScript运行时错误:对象不支持属性或方法'defineProperty'”。如果我改用任何其他浏览器(例如Firefox,Chrome)启动我的应用程序,它会按预期工作 - 没有错误。我似乎无法找到任何理由为什么IE没有按预期工作。我发现一个网站证实,一般来说,我的IE浏览器支持'defineProperty',所以现在我真的很困惑为什么它在开发过程中不起作用。由于我无法在VS中调试我的TypeScript代码,因此这变得特别重要。有什么想法吗?

+0

IE10是否在IE8兼容模式下运行您的代码? – serg10

+0

你钉了它。更改兼容模式(可能结合清除缓存)使其工作。由于它在启动和加载脚本时会抛出许多异常,因此我甚至无法检查IE的状态,直到我将所有TypeScript引用注释掉。感谢您的答复。 – 7dino7

回答

6

根据ES5兼容性表Object.defineProperty is supported in IE9 and above

在IE8中的支持是有限的。

但是,IE10有习惯在兼容模式下运行本地和Intranet页面,即使相同的页面在Internet上以正常模式运行。

可以在工具的对话框中改变这一>兼容性视图设置(删除选项中的“在兼容模式下显示Intranet站点”你也可以防止这种使用正确的文档类型的组合:

<!DOCTYPE html> 

user-agent compatibility tag,这将不再需要(或支持)在IE11和上方。

<meta http-equiv="x-ua-compatible" content="IE=edge"> 

这必须是<head>元件内的第一标签。

+1

很高兴知道。谢谢! – 7dino7

+0

唯一的问题是Windows XP上的IE8不会关心该标签,因此唯一的人员是运行IE> 8的人,这些人在兼容模式下首先查看。 – cchamberlain

1

确保您的HTML文件的第一行是

<!doctype html> 

这将阻止IE在兼容模式和禁用ES5功能去。

+0

嗯,我一直在我的'default.htm'文件中,但它仍然显然是在兼容模式下启动。 – 7dino7

+0

@basarat我在我的index.html中有<!doctype html>,我仍然在IE11中出现这个错误 –

相关问题