使用 requirejs 异步插件时捕获 Google Maps API 错误

jme*_*vin 1 javascript google-maps google-maps-api-3

我正在部署一个 JS 应用程序,它依赖于 Google 地图。我使用 RequireJS 的异步插件加载了 Google Maps SDK for JS ...

mapsKey = '&key=' + MY_API_KEY;
mapsURL = 'https://maps.googleapis.com/maps/api/js?libraries=places,geometry&v=3' + mapsKey;
define('GoogleMaps', ['async!' + mapsURL], function() {
    return window.google.maps;
});
Run Code Online (Sandbox Code Playgroud)

我从我们的服务器获取 MY_API_KEY ,因为我不想在应用程序代码中使用它。如果我们的服务器暂时不可用并且无法获取密钥值,或者由于某种原因 Google 拒绝了 API 密钥,则会出现控制台错误...

"Google Maps API error: Google Maps API error: InvalidKeyMapError https://developers.google.com/maps/documentation/javascript/error-messages#invalid-key-map-error"
Run Code Online (Sandbox Code Playgroud)

更糟糕的是,应用程序中有一个丑陋的弹出窗口......

在此处输入图片说明

我在 Google 上设置了有效的 API 密钥,一切正常。但如果出现加载错误,我想在没有 API 密钥的情况下重试。Google 确实会在 JS 控制台中发出有关缺少密钥的警告,但至少现在它仍然是最后的手段。

问题:如何捕捉 Google Maps API 错误?

该错误是在加载过程中从 Google 地图库中抛出的。这不是超时,而是无效的关键参数错误。检查生成的 window.google.maps 实例不是一个选项,因为丑陋的弹出消息已经显示。我看不到捕获错误并防止弹出窗口的方法。作为最后的手段,我想提供一些防御性代码以在没有 API 密钥的情况下重试。

jtm*_*mnt 5

您可以使用此全局函数捕获身份验证错误:

function gm_authFailure() { /* Code */ };
Run Code Online (Sandbox Code Playgroud)

如果您想以编程方式检测身份验证失败(例如自动发送信标),您可以准备一个回调函数。如果定义了以下全局函数,则会在身份验证失败时调用它。函数 gm_authFailure() { /* 代码 */ };

https://developers.google.com/maps/documentation/javascript/events#auth-errors