2016-02-17 4 views
1

В моей текущей настройке пользователь щелкает по ссылке для динамического загрузки контента, который также включает загрузку в сценарии. Я хочу проверить, загружен ли внешний скрипт (в частности, JS API Google Maps), и если это не так, продолжайте и делайте это.Проверка наличия внешней библиотеки JS или нет

Вот мой код:

if(_href == "contact.html") { 

// this will run everytime we navigate/click to go to "contact.html" 
console.log("contact.html loaded"); 

// load the contact.js script, and once loaded, 
// run the initMap function (located inside contact.js) to load the map 
$.getScript("contact.js", function() { 

    // store the length of the script, if present, in a varialbe called "len" 
    var len = $('script[src="https://maps.googleapis.com/maps/api/js"]').length; 
    console.log(len); 

    // if there are no scripts that match len, then load it 
    if (len === 0) { 
     // gets the script and then calls the initMap function to load the map 
     $.getScript("https://maps.googleapis.com/maps/api/js", initMap); 
     console.log("Google Maps API loaded") 
    } else { 

     // otherwise the script is already loaded (len > 0) so just run the initMap function 
     initMap(); 
    } 
}); 

Однако, это не работает. Каждый раз, когда пользователь нажимает на страницу контакта, «len» всегда 0, независимо от того, загружен ли сценарий уже («len» должен быть больше 0, когда он загружен). Это приводит к этой ошибке в журнале: log error

+0

Я действительно смущен, в обратном вызове для '$ .getScript' скрипт всегда загружен, но вы загружаете' contact.js' и, похоже, ожидаете, что Карты Google будут загружены, хотя оба сценария не будут Кажется, что-то связано друг с другом? – adeneo

+0

вы можете найти ответ от http://stackoverflow.com/questions/9521298/verify-external-script-is-loaded – user86745458

+0

@adeneo Извините, если я вас смутил, но я только изучал веб-разработку для month now: p Я надеюсь, что это ответит на ваш вопрос: 'contact.js' содержит функцию, для которой сначала необходимо загрузить Карты Google - этот файл js в основном создает карту, устанавливает ее параметры и т. д. - поэтому необходимо, чтобы Google Maps сначала загружен, иначе я получаю сообщение об ошибке. Мне нужно как «contact.js», так и API Google Maps загружаться до того, как я вызову функцию внутри 'contact.js'. Я только хочу, чтобы Карты Google загружались один раз, в противном случае я получаю сообщение об ошибке (однако, я не получаю таких ошибок при загрузке 'contact.js' – Attila

ответ

3

Редактировать: параметр датчика больше не используется, поэтому он был удален из кода ниже.

Если я правильно понимаю, я думаю, что вы можете портить материал len и просто проверить, загружен ли Google ... это правда? Если да, попробуй это.

if (typeof google === 'object' && typeof google.maps === 'object') { 

    initMap(); 

} else { 

    var script = document.createElement("script"); 

    script.type = "text/javascript"; 

    script.src = "http://maps.google.com/maps/api/js?callback=initMap"; 

    document.body.appendChild(script); 
} 

Это должно заставить вас двигаться вперед, надеюсь. Удачи!

+0

Исправлено форматирование! – duncan

+1

@ hardba11 Это прекрасно, большое вам спасибо! «sensor = false», потому что я получил ошибку, но он по-прежнему отлично работает без этой части: «Параметр датчика больше не требуется для API JavaScript для Google Maps. Это не будет препятствовать правильному использованию JavaScript API Google Maps , но мы рекомендуем удалить параметр датчика из элемента сценария. " Отправлено: https://developers.google.com/maps/documentation/javascript/error-messages – Attila

+0

Да, я должен был нарезать эту часть. это помогло вам. Спасибо, что приняли ответ! – hardba11

Смежные вопросы