使用jquery + rails ujs driver + google maps v3时IE 8 jquery错误。解决方法吗?

时间:2011-03-07 15:55:00

标签: jquery ruby-on-rails-3 maps ujs

使用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。此页面是Google的示例页面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,两者都没有表现出这个问题。

有没有人知道解决方法?

2 个答案:

答案 0 :(得分:2)

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

编辑:为你的问题而努力:

您引用的行是: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;
};

警告:您可能遇到类似问题的更多地方,因此测试得很好。

只是要说清楚这不是最有效/最好的方法,但确实明显地表明了你/我正在做的事情。

答案 1 :(得分:2)

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

这是[{3}}报告的已知问题,jquery团队的人们有一个解决方案。 jquery 1.4.4 bugfix分支中有一个补丁(请参阅这里的讨论http://bugs.jquery.com/ticket/7071),但它尚未被引入1.4.4更新或1.5.1更新。

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