2010-04-28 127 views
5

我已经在IE7和IE8(所有兼容模式下)和Windows 7 Ultimate(在所有兼容模式下)的Windows XP SP3上测试过它,并且它失败两者都是一样的。我正在运行couchapp存储库中的最新HEAD。这在我的OSX 10.6.3开发机器上工作正常。我已经在Windows 7旗舰版上使用Chrome 4.1.249.1064(45376)和Firefox 3.6进行了测试,并且它们都正常工作。由于两者都做了Safari 4和Firefox 3.6 OSX 10.6.3如何让jquery.couch.app.js与IE8一起使用

以下是错误消息

网页错误的详细信息

用户代理:Mozilla的/ 4.0(兼容; MSIE 8.0; Windows NT的6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0)时间戳:4月28日星期三 2010 03:32:55 UTC

消息:对象不支持此 属性或方法行:159字符:7 代码:0 URI: http://192.168.0.105:5984/test/_design/test/vendor/couchapp/jquery.couch.app.js

这里是代码的 “得罪” 位,它在Chrome,Firefox和Safari就好作品。如果说失败是从文件jquery.couch.app.js

157 var qs = document.location.search.replace(/^\?/,'').split('&'); 
    158 var q = {}; 
    159 qs.forEach(function(param) { 
    160 var ps = param.split('='); 
    161 var k = decodeURIComponent(ps[0]); 
    162 var v = decodeURIComponent(ps[1]); 
    163 if (["startkey", "endkey", "key"].indexOf(k) != -1) { 
    164  q[k] = JSON.parse(v); 
    165 } else { 
    166 q[k] = v; 
    167 } 
    168 }); 
+1

不工作在IE ... *现在经过我在哪里听说过.. 。* * – 2010-04-28 03:57:56

回答

6

的forEach(开始qs.forEach())是位于最近加入JavaScript规范的功能行了,所以不是所有的浏览器都支持它。

您可以在MDC读到它: https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Global_Objects/Array/forEach

在 “兼容性”,你会发现一个片段,使的forEach()可用。

if (!Array.prototype.forEach) 
{ 
    Array.prototype.forEach = function(fun /*, thisp*/) 
    { 
    var len = this.length >>> 0; 
    if (typeof fun != "function") 
     throw new TypeError(); 

    var thisp = arguments[1]; 
    for (var i = 0; i < len; i++) 
    { 
     if (i in this) 
     fun.call(thisp, this[i], i, this); 
    } 
    }; 
} 

因此,将上面的代码复制并粘贴到您的脚本并forEach()应该工作。

+0

这只是部分解决了我的问题,因为我不得不在我对这个问题的回答中提到的'indexOf'。 – 2011-06-22 16:34:24

0

我也不得不加入indexOf()到Array对象得到它的工作固定在foreach()的问题

if (!Array.prototype.indexOf) 
{ 
    Array.prototype.indexOf = function(elt) 
    { 
     var len = this.length >>> 0; 

     var from = Number(arguments[1]) || 0; 
     from = (from < 0) 
       ? Math.ceil(from) 
       : Math.floor(from); 
     if (from < 0) 
      from += len; 

     for (; from < len; from++) 
     { 
      if (from in this && 
       this[from] === elt) 
       return from; 
     } 
     return -1; 
    }; 
} 
相关问题