在Google Maps api中尝试抓取错误消息

时间:2017-07-26 22:29:42

标签: javascript google-maps

我正在使用javascript并收到一条消息,表明我已超出此API的每日请求配额。有没有办法在try catch块中捕获此错误消息,因此当我查看配额时,我可以执行另一段代码。我看过几个类似的帖子,但没有任何帮助。这是我的代码。

(function (window, google, lat, lng) {
           var options = {
               center: {
                   lat: Number(lat),
                   lng: Number(lng)
               },
                 zoom: 5,
                 disableDefaultUI: true,
                 scrollwheel: true,
                 draggable: false
           },
           element = document.getElementById('map-canvas')
           var map = new google.maps.Map(element, options)
       }(window, window.google, result[i]['latitude'], result[i]['longitude']));

3 个答案:

答案 0 :(得分:7)

<强>更新 根据{{​​3}}:

  

如果要以编程方式检测身份验证失败(例如自动发送信标),则可以准备回调函数。如果定义了以下全局函数,则在身份验证失败时将调用它。 function gm_authFailure(){// code}

这是gm_authFaliure函数应该能够捕获的documentation个错误。它还提到了 OverQuotaMapError 错误。

根据list

  

如果在特定时间段内发出的请求太多,则API会返回OVER_QUERY_LIMIT响应代码。

所以你应该检查一下响应代码。如果Google地图javascript库不允许访问响应代码,那么我建议向API发出HTTP请求以获取响应代码。

function initMap(window, google, lat, lng) {
   var options = {
       center: {
           lat: Number(lat),
           lng: Number(lng)
       },
       zoom: 5,
       disableDefaultUI: true,
       scrollwheel: true,
       draggable: false
   },
   element = document.getElementById('map-canvas'),
   map = new google.maps.Map(element, options);
};

function googleMapsCustomError(){
    alert('Google Maps custom error triggered');
}

// if you want to respond to a specific error, you may hack the
// console to intercept messages.
// check if a message is a Google Map's error message and respond
// accordingly
(function takeOverConsole() { // taken from http://tobyho.com/2012/07/27/taking-over-console-log/
    var console = window.console
    if (!console) return

    function intercept(method) {
        var original = console[method]
        console[method] = function() {
           // check message
           if(arguments[0] && arguments[0].indexOf('OverQuotaMapError') !== -1) {
             googleMapsCustomError();
           }
           
            if (original.apply) {
                // Do this for normal browsers
                original.apply(console, arguments)
            } else {
                // Do this for IE
                var message = Array.prototype.slice.apply(arguments).join(' ')
                original(message)
            }
        }
    }
    var methods = ['error']; // only interested in the console.error method
    for (var i = 0; i < methods.length; i++)
        intercept(methods[i])
}())
<!DOCTYPE html>
<div id="map-canvas"></div>

<script>
// Notice i am defining this within my html file, just to be sure that this function exists before the Google Maps API is loaded.
window.gm_authFailure = function() {
    // remove the map div or maybe call another API to load map
   // maybe display a useful message to the user
   alert('Google maps failed to load!');
}

window.showMap = function() {
  var lat = -34.397,
      lng = 150.644;
  initMap(window, window.google, lat, lng);
};
</script>

<!-- We are passing an invalid API key. Also notice that we have defined 'callback' as 'showMap' which means that when the Google API JavaScript library is finished loading it will call the 'showMap' function. -->
<script src="https://maps.googleapis.com/maps/api/js?key=INVALID_API_KEY&callback=showMap"
    async defer></script>

答案 1 :(得分:0)

是的,JavaScript supports try-catch blocks。以下是代码的示例实现:

(function (window, google, lat, lng) {
           var options = {
               center: {
                   lat: Number(lat),
                   lng: Number(lng)
               },
                 zoom: 5,
                 disableDefaultUI: true,
                 scrollwheel: true,
                 draggable: false
           },
           element = document.getElementById('map-canvas')
           try {
               var map = new google.maps.Map(element, options)
           } catch (error) {
               // handle error
               console.log(error.message);
           } finally {
               // optional cleanup code
           }
       }(window, window.google, result[i]['latitude'], result[i]['longitude']));

答案 2 :(得分:0)

根据谷歌文档。

  

如果超出使用限制,您将获得OVER_QUERY_LIMIT状态   代码作为回应。

     

这意味着Web服务将停止提供正常响应   并切换到仅返回状态代码OVER_QUERY_LIMIT直到更多   再次允许使用。这可能发生:

     
      
  • 在几秒钟内,如果因为您的应用程序每秒发送的请求过多而收到错误。

  •   
  • 在接下来的24小时内,如果因为您的应用程序每天发送了太多请求而收到错误。每日配额为
      在太平洋时间午夜重置。

  •   

请参阅this链接。这会很有帮助。