2010-04-28 3 views
5

Я протестировал это на Windows XP SP3 в IE7 и IE8 (во всех режимах совместимости) и Windows 7 Ultimate в IE8 (во всех режимах совместимости), и он не работает таким же образом на обоих. Я запускаю последнюю HEAD из репозитория couchapp. Это отлично работает на моей машине разработки OSX 10.6.3. Я тестировал с Chrome 4.1.249.1064 (45376) и Firefox 3.6 на Windows 7 Ultimate, и они оба отлично работают. Как сделать и Safari 4 и Firefox 3.6 на OSX 10.6.3Как получить jquery.couch.app.js для работы с IE8

Вот сообщение об ошибке,

сведения об ошибке Webpage

Агент пользователя: 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) Временная метка: ср., 28 апреля 2010 03:32:55 UTC

Сообщение: Объект не поддерживают эту свойство или метод Линия: 159 Char: 7 Код: 0 URI: http://192.168.0.105:5984/test/_design/test/vendor/couchapp/jquery.couch.app.js

и здесь является "задеть" бит кода, который работает на Chrome, Firefox и Safari просто отлично. Если говорит, что неудача на линии, которая начинается qs.forEach() из файла 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 ... * Теперь, когда я слышал, что раньше .. .? * –

ответ

6

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', как упоминалось в моем ответе на этот вопрос. –

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; 
    }; 
} 
Смежные вопросы