使用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.html和 http://avioing.com/maps/marker-simple_no_marker.html,两者都没有表现出这个问题。
有没有人知道解决方法?
答案 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)
这是[{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。到目前为止,两者似乎都解决了我在问题中描述的具体问题。