0

SCRIPT438:对象不支持属性或方法“键”

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

这是失败的代码:

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

我有一个地图 lastResults 通过 ajax 调用作为 json 对象接收。我知道 Object.keys(...) 不适用于主机对象,但我的 json 对象肯定不是主机对象?

那么这怎么会发生,为什么这两种环境之间存在差异呢?

4

2 回答 2

1

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

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

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

于 2013-12-17T11:31:59.033 回答
0

您可以尝试自己滚动:

Object.keys = Object.keys || function keys(obj) {
  var ret = [];
  for (var prop in obj) if (obj.hasOwnProperty(prop)) ret.push(prop)
  return ret;
}
于 2013-11-12T23:45:23.310 回答