2

用 jquery 1.4.4 和 1.5.1 测试,确认两者都有问题

使用 jquery + rails ujs 驱动程序(来自 github)+ google maps v3 时,单击地图标记会导致 IE 错误“失败”。当使用完整的、CDN 托管的 jquery v 1.5.1 时,IE 调试器指向第 2838 行(请注意,jquery.min.js 或版本 1.4.4 也会出现问题)。

确认触发此错误的是ujs驱动程序。删除驱动程序后,单击标记不会导致错误。

此处提供了简单的实时示例:http: //avioing.com/maps/marker-simple.html。此页面是谷歌示例页面http://code.google.com/apis/maps/documentation/javascript/examples/marker-simple.html的精确副本。我只添加了脚本调用来加载 jquery 和最新的 ujs 驱动程序。您应该能够通过单击地图标记来重现错误。

示例页面在 FF 和 Chrome 中运行良好,错误仅在 IE 中出现

另请参阅 http://avioing.com/maps/marker-simple_no_ujs.htmlhttp://avioing.com/maps/marker-simple_no_marker.html,两者均未出现此问题。

有人知道解决方法吗?

4

2 回答 2

2

@Mark 为我指出了正确的方向,我找到了解决方案。

这是此处报告的已知问题http://bugs.jquery.com/ticket/7071,jquery 团队中的人员提供了解决方案。jquery 1.4.4 bugfix 分支中有一个补丁(请参阅此处的讨论https://github.com/jquery/jquery/pull/13),但它尚未被拉入 1.4.4 更新或1.5.1 更新。

据我所知,jquery(src/events.js)中有4个“var elem = e.target,type = elem.type”实例需要替换。您可以“git clone”分支并自己构建修补的 jquery,或者修补您的副本,或者下载我已经修补的两个之一(绝对没有保证,yada,yada ...):https ://gist.github.com /861689。到目前为止,两者似乎都解决了我在问题中描述的具体问题。

于 2011-03-09T04:25:47.873 回答
2

这个问题让我想起了与 IE 和 VML 类似的问题,如下所述:http: //bugs.jquery.com/ticket/7071当 IE 遇到一个元素并且您尝试访问该元素的属性时(elem.type在 jQuery 代码中),它失败并且对该元素的进一步访问尝试没有成功。

编辑:解决您的问题:

你引用的行是: 2838 in jquery 1.5.1

var elem = e.target,
    type = elem.type;

你需要用这样的东西来捕获错误:(破解jquery源)

    var testType = 'unknown';
    try { testType = elem.type; } catch (e) { /* kill IE exceptions on unknown type nodes */ }
    if (testType !== 'unknown') { 
    var elem = e.target,
        type = elem.type;
};

警告:您可能会遇到更多类似问题的地方,所以请好好测试。

只是为了说明这不是最有效/最好的方法来做到这一点,但确实让你/我正在做什么来解决这个问题显而易见。

于 2011-03-07T17:03:46.217 回答