2010-04-28 126 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; 
    }; 
} 
相關問題