我有一个网络应用,其中一些网页使用谷歌地图API。
我正在使用带有回调的异步加载,如文档中所述:https://developers.google.com/maps/documentation/javascript/tutorial?csw=1#asynch
当网络连接正常时,它工作得很好。
但是,如果由于某种原因,浏览器无法下载谷歌地图脚本,它将在不可恢复的连接之前挂起大约10秒钟。该网络错误会导致脚本执行停止,我无法继续使用我的应用程序进程。
我希望从该错误中恢复以继续我的网络应用程序,只需显示一条信息消息,告知用户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
- 如果不可用则快速失败
- 如果可用,继续成功回调
目前作为一种糟糕的解决方法,我使用了在script元素中编写的回调:
googlemapsscript.onerror="errorLoadGoogleMaps()"
然而,它根本没有快速失败,浏览器尝试下载脚本大约10秒钟,然后抛出错误并执行回调。
如何在尝试下载不可用的脚本(特别是Google Maps API)时立即失败?