如何让 jquery.couch.app.js 与 IE8 一起使用

发布于 2024-08-30 17:21:01 字数 1550 浏览 7 评论 0原文

我已经在 Windows XP SP3 的 IE7 和 IE8(在所有兼容模式下)和 Windows 7 Ultimate 的 IE8(在所有兼容模式下)上进行了测试,并且在两者上都以同样的方式失败。我正在运行 couchapp 存储库中的最新 HEAD。这在我的 OSX 10.6.3 开发机器上运行良好。我已经在 Windows 7 Ultimate 上使用 Chrome 4.1.249.1064 (45376) 和 Firefox 3.6 进行了测试,它们都工作正常。 OSX 10.6.3 上的 Safari 4 和 Firefox 3.6 也是如此,

这是错误消息

网页错误详细信息

用户代理:Mozilla/4.0(兼容; 微星8.0; Windows NT 6.1;三叉戟/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0) 时间戳:4 月 28 日星期三 2010 年 03:32:55 世界标准时间

消息:对象不支持此功能 属性或方法 行:159 字符:7 代码:0 URI: http://192.168.0.105:5984/测试/_design/test/vendor/couchapp/jquery.couch.app.js

这是“有问题的”代码,它在 Chrome、Firefox 和 Safari 上运行得很好。如果说失败发生在从文件 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 });

I have tested this on Windows XP SP3 in IE7 and IE8 ( in all compatibility modes ) and Windows 7 Ultimate in IE8 (in all compatiblity modes) and it fails the same way on both. I am running the latest HEAD from the the couchapp repository. This works fine on my OSX 10.6.3 development machine. I have tested with Chrome 4.1.249.1064 (45376) and Firefox 3.6 on Windows 7 Ultimate and they both work fine. As do both Safari 4 and Firefox 3.6 on OSX 10.6.3

Here is the error message

Webpage error details

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) Timestamp: Wed, 28 Apr
2010 03:32:55 UTC

Message: Object doesn't support this
property or method Line: 159 Char: 7
Code: 0 URI:
http://192.168.0.105:5984/test/_design/test/vendor/couchapp/jquery.couch.app.js

and here is the "offending" bit of code, which works on Chrome, Firefox and Safari just fine. If says the failure is on the line that starts qs.forEach() from the file 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 });

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

何止钟意 2024-09-06 17:21:01

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() 应该可以工作。

forEach() is a function that's recently added to the JavaScript specification, so not all browsers support it.

You can read about it at MDC:
https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Global_Objects/Array/forEach

Under "Compatibility", you'll find a snippet that makes forEach() available.

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

So, copy and paste the code above to your script and forEach() should work.

终遇你 2024-09-06 17:21:01

我还必须将 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;
    };
}

I also had to add indexOf() to the Array object to get it working after fixing the forEach() problem

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;
    };
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文