我们有一个在 jQuery 1.4.2 上运行的应用程序,我们正在慢慢升级到 jQuery 1.9.1
我们正在升级的页面之一现在有一个谷歌地图。从广义上讲,该页面包含...
<head>
<script src="/javascripts/jquery-1.4.2.min.js?1362527887" type="text/javascript"></script>
...
<script src="/javascripts/google_map.js?1362527225" type="text/javascript"></script>
</head>
<body>
...
<script type="text/javascript">
$(document).ready(function () {
new GoogleMap($('#map_canvas'), '<%= APP_CONFIG['google_maps_api_key'] %>');
});
</script>
</body>
这会加载 jQuery,然后加载初始化我们的 Google 地图的 javascript 文件,如下所示:
GoogleMap = function (mapElement, apiKey) {
this.initialized = false;
this.mapElement = mapElement;
$.getJSON('http://maps.googleapis.com/maps/api/js?key=' + apiKey + '&sensor=false&callback=?', $.proxy(this.apiLoaded, this));
};
GoogleMap.prototype = {
apiLoaded:function () {
this.show();
var mapOptions = this.defaultLocation();
this.map = new google.maps.Map(this.mapElement[0], mapOptions);
...
},
....
};
在 jQuery 1.4.2 上,这一切都有效。然而,当我们转移到 jQuery 1.9.1(或 1.6.3 和 1.9.1 之间的任何 jQuery 版本,不管它的价值)时,我在 Javascript 控制台中看到以下错误:
Uncaught TypeError: Property 'jQuery191006026467704214156_1362528404472' of object [object Window] is not a function
此错误发生在 main.js 中,该文件在通过上述调用加载谷歌地图时出现。但是,将 jQuery 版本从 1.4.2 更改为 1.4.3 可以正常工作 - 所以破坏它的不仅仅是“任何更改”。
一个重新创建错误的 JSBin(尽管没有显示地图,即使有 1.4.2,可能因为我删掉了太多?)在这里:http: //jsbin.com/okirac/4/
对于更高版本的 jQuery,我是否需要以不同的方式调用谷歌地图?或者我是否应该以不同的方式使用 jQuery 以避免与谷歌地图发生冲突?
就像我说的,这些地图在 jQuery 1.4.2 和页面上的一大堆其他 javascript 调用中运行良好。但是后来的 jQuery 版本打破了页面上的谷歌地图,而所有其他的 javascript 调用似乎都很好。