【发布时间】:2015-07-03 00:59:59
【问题描述】:
我有一个网络应用程序,其中一些页面使用谷歌地图 API。
我正在使用带有回调的异步加载,如文档中所述:https://developers.google.com/maps/documentation/javascript/tutorial?csw=1#asynch
当网络连接正常时它工作得很好。
但是,如果由于某种原因,浏览器无法下载谷歌地图脚本,它将挂起大约 10 秒,然后出现不可恢复的连接错误。该网络错误停止脚本执行,我无法继续我的应用程序进程。
我想从那个错误中恢复以继续我的 web 应用程序的过程,只是通过一条信息消息告诉用户 Google 地图目前不可用。
我尝试了以下方法,但由于跨域 xmlhttprequest 访问,它显然不起作用:
$.get("https://maps.googleapis.com/maps/api/js?key=.......",function(){
var googlemapsscript = document.createElement('script');
googlemapsscript.type = 'text/javascript';
googlemapsscript.src = 'https://maps.googleapis.com/maps/api/js?key=........&sensor=false&callback=successLoadGoogleMaps';
document.body.appendChild(googlemapsscript);
}).fail(function(){
errorLoadGoogleMaps();
});
当它无法访问 Google Maps API 时,jquery $.get 会失败,因此会立即运行errorLoadGoogleMaps()。但是,当它可以访问 API 时,它会引发跨域错误。
我正在寻找以下行为:
- 尝试下载 Google Maps API
- 如果不可用,请快速失败
- 如果可用,继续成功回调
目前作为一个不好的解决方法,我正在使用脚本元素中编写的回调:
googlemapsscript.onerror="errorLoadGoogleMaps()"
然而它并没有很快失败,浏览器尝试下载脚本大约 10 秒,然后抛出错误并执行回调。
尝试下载不可用的脚本时如何立即失败(尤其是此处的 Google Maps API)?
【问题讨论】:
标签: javascript google-maps error-handling