2013-04-08 74 views
0

SCRIPT438工作:对象不支持我收到此错误属性或方法“键”Object.keys(......)并不总是在IE

使用IE 9.0.8112.16421,但并非总是如此。两种环境中的应用程序和代码完全相同。一台在Intranet主机上运行JBoss,另一台在本地主机上运行Jetty。前者给出错误。

这是它失败的代码:

return $.get('/rest/typeaheads/' + query, function(data) { 
    lastResults = data; 
> return process(Object.keys(lastResults)); < 
}); 

我已经得到了通过AJAX调用收到JSON对象映射lastResults。我明白,Object.keys(...)不适用于主机对象,但我的json对象肯定不是主机对象?

那么这怎么可能发生,为什么两种环境之间的区别呢?

+0

这可能与IE9的安全设置有关,这些设置对于internet/intranet/local区域不同。您可以使用这里建议的解决方法:http://stackoverflow.com/questions/13723805/ie-issue-object-keysvalue-length-not-supported – 2013-04-08 08:16:35

回答

0

显然; IE 9将在Intranet环境中假定您的所有Intranet应用程序都是废话。因此它将进入“兼容模式”。在“兼容模式”下,它将模拟IE 7.

我对此的解决方案是添加一条警告,提醒用户关于此问题并提供关闭“兼容模式”的说明。

此外,这对我来说不再是一个问题,我应该我需要支持IE7。我已经开始使用提供它自己的函数来检索密钥的下划线库。

0

你可以尝试滚动自己:

Object.keys = Object.keys || function keys(obj) { 
    var ret = []; 
    for (var prop in obj) if (obj.hasOwnProperty(prop)) ret.push(prop) 
    return ret; 
}