首页 文章

如何在IE 9中为Object.keys调用失败编写补丁?

提问于
浏览
0

Background Information

我在这里描述了'm having the same problem that':Object.keys not working in internet Explorer本质上,我在IE中失败了 .

我试图将上面帖子中提出的解决方案改编为我的代码,但它不起作用 .

这是原始代码的样子 - 我只显示围绕Object.keys调用的代码:(在chrome中工作)

for (var key in res) {
         if (Object.keys(res[key]['associated_users']).length > 0 ) { 
               //do something here to build htmlstring with data
         } else {
              htmlstring += "<td>&nbsp;</td>";
         }
    } //end for loop

在IE 9中,系统在调用Object.keys方法的行上失败 .

我尝试在ajax成功处理程序中的循环之前添加以下逻辑,以检查浏览器是否支持Object.keys:

var len = 0;             
         if (!Object.keys) {
               var temp = keyslengthforIE(res);
               len = temp.length;
         } else {
               len = Object.keys(res[key]['associated_users']).length;
        }
        if (len > 0 ) {
               //do something here to build htmlstring with data
         } else {
              htmlstring += "<td>&nbsp;</td>";
         }

这就是新功能“keyslengthforIE”的样子:

function keyslengthforIE(obj) {
    var keys = [];  
    for (var i in obj) {
      if (obj.hasOwnProperty(i)) {
        keys.push(i);
      }
    }
    return keys;
}

Problem

我的代码有两个问题,我不知道如何修复 .

  • IE在看到对Object.keys的调用时仍然会抱怨 . 我得到错误“Object.keys:参数不是一个对象”,它指向第319行 . 第319行是这样的:

len = Object.keys(res [key] ['associated_users']) . length;

  • 从新函数返回的len实际上是错误的 . 我知道它应该是10但我得到1 .

任何建议,将不胜感激 .

编辑1

现在我知道IE 9支持它,我看到了我的错误 . 将发布回答

1 回答

  • 0

    我不得不改变原始代码:

    for (var key in res) {
             if (Object.keys(res[key]['associated_users']).length > 0 ) { 
                   //do something here to build htmlstring with data
             } else {
                  htmlstring += "<td>&nbsp;</td>";
             }
        } //end for loop
    

    看起来像这样:

    for (var key in res) {
      if ( ( res[key]['associated_users']) && (Object.keys(res[key]['associated_users']).length > 0 )) {
                   //do something here to build htmlstring with data
             } else {
                  htmlstring += "<td>&nbsp;</td>";
             }
        } //end for loop
    

相关问题