как заставить jquery.couch.app.js работать с IE8

Я протестировал это на 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 });

5
задан 28 April 2010 в 03:56
поделиться

2 ответа

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 () должен работать.

6
ответ дан 14 December 2019 в 13:30
поделиться

Мне также пришлось добавить 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;
    };
}
0
ответ дан 14 December 2019 в 13:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: