2015-12-22 3 views
1

Я знаю, что этот вопрос задавался несколько раз, но все остальные темы не решают мою проблему. Моя проблема: у меня есть приложение на основе углов, а некоторые страницы используют карты Google для отображения элементов на карте. Все работало нормально, и я не менял ни одной строки кода и заметил, что карты Google не работают сейчас.Карты Google: ReferenceError - google не определен

У меня есть Google скрипт импортирован в индексном файле, и даже не использовать его в главной странице:

<script src="http://maps.google.com/maps/api/js?sensor=true&libraries=places&language=ru-RU"></script> 

Пожалуйста, откройте этот адрес http://yuppi.com.ua и перейти в консоль, подождите 3 секунды и будет отображаться эти ошибки.

ReferenceError: google is not defined  stat.js 
ReferenceError: google is not defined  util.js 
ReferenceError: google is not defined  common.js 
+0

Вы ссылались на библиотеку карт JS? В [Начало работы] (https://developers.google.com/maps/documentation/javascript/tutorial) из Maps for JS обсуждается это далее. Вы также можете использовать [Jaces API] (https://developers.google.com/maps/documentation/javascript/places). Обратите внимание, что они служат для Карт в разных целях. – adjuremods

ответ

1

Видимо эти ошибки возникают из-за следующий код в script.js file:

yuppiApp.run(function($rootScope, $window) { 
    $rootScope.$on("$locationChangeStart", function() { 
     Object.keys($window).filter(function(k) { 
      return k.indexOf("google") >= 0 
     }).forEach(function(key) { 
      delete $window[key] 
     }) 
    }) 
}); 

delete $window[key]удаляетgoogle свойства от window объекта, который, в свою очередь, брейков загрузки библиотек Google Maps (google - это корневое пространство имен API Карт Google).

Я не уверен, почему google свойство становится удален в вашем случае, но когда-то из указанных строк, например, комментирует:

yuppiApp.run(function($rootScope, $window) { 
    $rootScope.$on("$locationChangeStart", function() { 
     //Object.keys($window).filter(function(k) { 
     // return k.indexOf("google") >= 0 
     //}).forEach(function(key) { 
     // delete $window[key] 
     //}) 
    }) 
}); 

ошибки исчезнут.

+1

Вы правы, я удалил эту функцию, и она снова работает. Эта функция была добавлена ​​как попытка сделать Google Adsense. –

0

Кажется, что вы используете карты Google перед загрузкой API. API загружается асинхронно, поэтому вы должны обязательно ссылаться на него при загрузке. Для достижения этой цели я знаю 2 способа:

  • вы можете использовать «обратный вызов» из параметров запроса с глобальной областью видимости функции, в которой вы будете INIT карты элементы:

    <script src="http://maps.google.com/maps/api/js?sensor=true&libraries=places&language=ru-RU&callback=initMap"></script> 
    
  • импортировать Google Loader а сами API и использовать его для управления нагрузкой API в коде JS:

    <script type="text/javascript" src="https://www.google.com/jsapi"></script> 
    

    затем

    google.load('maps', '3.exp', { 
        other_params: 'sensor=true&language=ru-RU&libraries=places', 
        callback: function() { 
         // You can now init your maps 
        } 
    }); 
    
Смежные вопросы