2010-04-28 25 views
5

Tôi đã thử nghiệm điều này trên Windows XP SP3 trong IE7 và IE8 (trong tất cả các chế độ tương thích) và Windows 7 Ultimate trong IE8 (trong tất cả các chế độ tương thích) và không thành công theo cùng một cách trên cả hai. Tôi đang chạy HEAD mới nhất từ ​​kho lưu trữ couchapp. Điều này hoạt động tốt trên máy phát triển OSX 10.6.3 của tôi. Tôi đã thử nghiệm với Chrome 4.1.249.1064 (45376) và Firefox 3.6 trên Windows 7 Ultimate và cả hai đều hoạt động tốt. Như làm cả hai Safari 4 và Firefox 3.6 trên OSX 10.6.3cách lấy jquery.couch.app.js để làm việc với IE8

Dưới đây là thông báo lỗi

chi tiết lỗi trang web

User Agent: Mozilla/4.0 (compatible; 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) Dấu thời gian: Thứ tư, 28 tháng 4 2010 03:32:55 UTC

Thông báo: Đối tượng không hỗ trợ tài sản hoặc phương pháp dòng này: 159 Char: 7 Code: 0 URI: http://192.168.0.105:5984/test/_design/test/vendor/couchapp/jquery.couch.app.js

và đây là "xúc phạm" chút mã, trong đó hoạt động trên Chrome, Firefox và Safari tốt. Nếu nói rằng thất bại là trên dòng bắt đầu qs.forEach() từ tập tin 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

Không làm việc trong IE ... * tại nơi tôi đã nghe nói rằng trước khi .. .? * –

Trả lời

6

foreach() là một hàm đó là thời gian gần đây được bổ sung vào đặc điểm kỹ thuật JavaScript, do đó không phải tất cả các trình duyệt hỗ trợ nó.

Bạn có thể đọc về nó tại MDC: https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Global_Objects/Array/forEach

Dưới "Compatibility", bạn sẽ thấy một đoạn mà làm cho foreach() có sẵn.

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); 
    } 
    }; 
} 

Vì vậy, hãy sao chép và dán mã ở trên vào tập lệnh của bạn và forEach() sẽ hoạt động.

+0

điều này chỉ khắc phục được một phần vấn đề của tôi vì tôi phải thêm 'indexOf' như đã đề cập trong câu trả lời của tôi cho câu hỏi này. –

0

Tôi cũng đã có thêm indexOf() đến đối tượng Array để làm cho nó làm việc, kể sửa chữa các vấn đề 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; 
    }; 
} 
Các vấn đề liên quan