IE11错误,对象不支持属性或方法'defineProperty'。

5

大家好,我有一份代码,这是其简化版

<!DOCTYPE html>
<html>
    <head>
        <title>_</title>
        <meta content="text/html; charset=utf-8" http-equiv="Content-Type">
        <script>

            Object.defineProperty(
                Array.prototype,'len',{get:
                    function(){return this.length}
            });

            function pop(){
                ary=['abc',123];
                d1.innerText=ary.len;
            }

        </script>
    </head>
    <body onload="pop()">
        <div id="d1">d1</div>
    </body>
</html>

我的设置是:

  1. Chrome v40.0.2214.94 m
  2. IE v11.0.9600.16428
  3. IIS v7.5.7600.16385

当我打开任何一个浏览器并打开上面的文件时:

IE ==> C:\site\proj\default.htm
Chrome ==> file:///C:/site/proj/default.htm

两个浏览器都显示正确的结果:2... 但当我这样打开文件时:

IE ==> http://portal/proj/default.htm
Chrome ==> http://portal/proj/default.htm

其中portalIIS中设置的本地主机站点名称。

IE 显示 undefined 并抛出控制台错误:

对象不支持属性或方法 'defineProperty'

Chrome 仍然正确地显示 2


所以,我的问题是...

IIS 是否更改了 IE 的“兼容模式”或其他设置,还是我只需要升级到更新版本的 IIS


思考中...

我第一次使用 .hta 文件,并且当我尝试访问数组上的 .indexOf 时,我得到了类似上面的错误消息...

问题是,我想将新的 indexOf 属性设置为可枚举,所以我使用了 Object.defineProperty 将属性设置为可枚举,这就是我来到 Stack' 上的原因...


1
你是否检查了IE11,看它是不是在某种兼容模式下?你添加了X-UA标头,设置为Edge等吗?你是说这是在.hta文件中吗?defineProperty在IE11中明确受支持,所以肯定还有其他问题。 - adeneo
1
MSDN上的一句话:“默认情况下,HTA在兼容视图中显示网页,其中以IE7标准模式显示标准模式内容,以IE5(Quirks)模式显示怪异模式内容。” - adeneo
@adeneo:不知道如何检查IE是否处于兼容模式。这不是.hta,而是default.htm。在我写这篇文章的同时,我打开了另外5个标签页来尝试学习有关x-ua-compatible头部的内容,这是我目前没有在任何我的.hta文件上使用的内容,以及如何在Quirks mode中运行它们?然而,我的问题是为什么上述.htm文件通过IIS无法在IE中正确编码...... - LostInCyberSpace
我没有可用的IIS,并且对IIS一无所知,而且已经多年没有使用HTA了。但是我知道设置正确的X-UA标头应该解决兼容性问题,并且如果一切正常,IE11中应该都可以使用indexOfdefineProperty - adeneo
@adeneo:感谢您的帮助!您已经为我指明了正确的方向... - LostInCyberSpace
显示剩余2条评论
1个回答

0

我认为问题出在IIS上,我在IE11/Win7/NodeJs服务器上测试了该页面,我可以看到“2”。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接