在我们所有的Umbraco网站中,谷歌地图数据类型已不起作用。直到昨天,这一切都很完美,但今天只有输入字段和位置字段,没有谷歌地图。。。
Firebug报告以下错误
错误:TypeError:无法将未定义转换为对象源文件:http://mydomain.com/WebResource.axd?d=tKK1ZgJBCMotVXJtV8pR9xzMqTmklCMezxGDl1po1iuUqd9OAFswOEzHFzCaf_jVz-AUweHtY9QXIBqtRjeITKZJW8DsgNEfWr5d43rOLcGkPLOTDqcjla1Kf5Atxrk4V0fVru8i6pj_kgbZvebWAyHrkbCDipPWDziYWT-lCHW-WaHOcz5hS1DefZvkJSICxqjpdChghoCUZhju3cHg2&t=634759042640000000&cdv=1线路:212
它的在线
context._maps[id] = new UmbracoGoogleMap.map(id, this);
在以下功能中
guiMap: function () {
var context = this;
this._apiLoaded = true;
jQuery('div.gmapContainer').each(function () {
var id = jQuery('div.map', this).attr('id');
context._maps[id] = new UmbracoGoogleMap.map(id, this);
context._maps[id].render();
});
},
还有很多其他人也报告了同样的问题,但还没有找到解决方案!http://our.umbraco.org/projects/backoffice-extensions/google-maps-datatype/bug-reports/33390-No-map-in-Backend
看起来问题与上下文有关。它被设置为窗口,而不是UmbracoGoogleMapDataType,因为"this"指向了错误的位置。所以我尝试了:
var context = UmbracoGoogleMapMapDataType;
this._apiLoaded = true;
jQuery('div.gmapContainer').each(function () {
var id = jQuery('div.map', this).attr('id');
context._maps[id] = new UmbracoGoogleMap.map(id, this);
context._maps[id].render();
});
现在看来,这只是一个临时补丁。如果你愿意,你可以从下载dllhttps://www.dropbox.com/s/3aj91cuzxn3rcbu/Our.Umbraco.GoogleMaps.zip
我们深入了解了错误发生的原因,显然是由于Google Maps Javascript API的更新。我们发现,永久性的解决方案是通过向ajax请求添加v: "3.8"
来请求特定版本的API:
UmbracoGoogleMap.loadMapsApi = function (cb) {
jQuery.ajax({
type: "get",
dataType: "script",
url: 'http://maps.google.com/maps/api/js',
data: {
v: "3.8",
sensor: false,
callback: cb
},
error: function () { alert('Could not load Google Maps API'); }
});
根据文档,如果没有指定版本,那么谷歌会返回最新的夜间版本。事实上,他们特别指出:
生产应用程序应始终指定次要版本(如3.7、3.8等)。
正如我们所看到的,3.9的最新版本破坏了与谷歌地图数据类型的兼容性,从而导致了错误。
更新:谷歌地图数据类型2.0.5版本现已可用,并包含上述修复程序。感谢Lee Kelleher!