jQuery 1.4.2 で実行されているアプリケーションがあり、徐々に jQuery 1.9.1 にアップグレードしています。
アップグレード中のページの 1 つに Google マップが追加されました。大まかに言えば、このページには...
<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 で発生します。このファイルは、上記の呼び出しで Google マップが読み込まれるときにダウンします。ただし、jQuery のバージョンを 1.4.2 から 1.4.3 に変更することは問題なく機能します。そのため、それを壊すのは「何らかの変更」だけではありません。
エラーを再現する JSBin はここにあります (ただし、1.4.2 が配置されていてもマップは表示されませんが、切り取りすぎたためでしょうか? )
jQuery の新しいバージョンでは、別の方法で Google マップを呼び出す必要がありますか? それとも、Google マップとの衝突を避けるために、jQuery を別の方法で使用する必要があるのでしょうか?
私が言うように、マップは jQuery 1.4.2 およびページ上の他の JavaScript 呼び出し全体で正常に動作します。しかし、jQuery の新しいバージョンでは、ページ上の Google マップが壊れていますが、他のすべての JavaScript 呼び出しは問題ないようです。