Я протестировал это на Windows XP SP3 в IE7 и IE8 (во всех режимах эмуляции) и Windows 7 Ultimate в IE8 (во всех режимах совместимости), и он приводит тот же путь к сбою на обоих. Я выполняю последнюю ГОЛОВУ от 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
Вот сообщение об ошибке
Детали ошибки веб-страницы
Агент пользователя: Mozilla/4.0 (совместимый; MSIE 8.0; Windows NT 6.1; трайдент/4.0; SLCC2;.NET CLR 2.0.50727;.NET CLR 3.5.30729;.NET CLR 3.0.30729; медиацентр ПК 6.0) Метка времени: среда, 28 апреля 2010 3: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 очень хорошо. Если говорит, что отказ находится на строке, которая запускается 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 });
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 () должен работать.
Мне также пришлось добавить 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;
};
}