5

これをIE7とIE8のWindowsXPSP3(すべての互換モード)とIE8のWindows 7 Ultimate(すべての互換モード)でテストしましたが、どちらでも同じように失敗します。couchappリポジトリから最新のHEADを実行しています。これは私のOSX10.6.3開発マシンで正常に動作します。Windows 7UltimateでChrome4.1.249.1064(45376)とFirefox 3.6を使用してテストしましたが、どちらも正常に動作します。OSX10.6.3上のSafari4とFirefox3.6の両方がそうであるように

これがエラーメッセージです

Webページエラーの詳細

ユーザーエージェント: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)タイムスタンプ: 2010年4月28日水曜日03:32:55UTC

メッセージ:オブジェクトはこのプロパティまたはメソッドをサポートしていません行: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 });
4

2 に答える 2

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()が機能するはずです。

于 2010-04-28T07:16:31.973 に答える
0

indexOf()また、forEach()の問題を修正した後、Arrayオブジェクトを追加して機能させる必要がありました。

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;
    };
}
于 2010-04-28T17:08:10.810 に答える