Убедитесь, что клиент Google API загружается до вызова скрипта - PullRequest
0 голосов
/ 09 апреля 2020

Короче говоря, я создаю полностью функциональный (или настолько функциональный, насколько это возможно) клон Youtube, используя клиент Google API для JavaScript в качестве стороннего проекта. Чтобы убедиться, что моя домашняя страница не была пустой до того, как пользователь начал поиск видео, я реализовал функцию, которая загружает некоторые предустановленные результаты поиска при загрузке страницы.

Эта функция не работает, и, хотя я думаю, что знаю, почему, я хотел бы получить некоторую помощь в ее преодолении, если это возможно.

Короче, так настроен мой код. В моем файле html скрипты загружаются так:

    <!-- Google API Client -->
    <script src="https://apis.google.com/js/api.js"></script>
    <!-- Other stuff -->
    <script src="dist/js/classes.js"></script> 
    <script src="dist/js/colorModeSwitch.js"></script> <!-- loads Google API client -->
    <script src="dist/js/ui.js"></script>
    <script src="dist/js/search&Player.js"></script> <!-- loads search results on home page -->

Скрипты загружаются также в том порядке, в котором они должны. Теперь в файле colorModeSwitch. js он загружает клиент Google API (который сначала загружается и выполняется), затем в search & Player. js функция загрузки результатов поиска на главной странице вызывается следующим образом: window.addEventListener('load', setUpHomePage); Ошибка при загрузке страницы выглядит следующим образом:

classes.js:12 Uncaught TypeError: Cannot read property 'search' of undefined
    at Youtube.getSearchResults (classes.js:12)
    at setUpHomePage (search&Player.js:55)

Это неизбежно приводит к этому коду, на который ссылается 'search': return gapi.client.youtube.search.list({...});

Я считаю, что Google API не загружается полностью и делает то, что ему нужно сделать до выполнения функции. По моим логам c, это должно работать, так как при загрузке страницы все должно быть в порядке, но это не так.

После появления этой ошибки, это не проблема при использовании любой из других функций которые используют клиент API Google через события «щелчка», только событие «загрузка» окна. Это заставило меня поверить, что к моменту загрузки самой страницы она загружается не полностью, даже если она вызывается до первого использования в событии окна load.

Теперь вопрос: как я могу убедиться, что клиент Google API сделал то, что ему нужно, до того, как я использовал его в обработчике событий окна?


Редактировать: После написания этого я придумал идею использовать setTimeout для вызова функции вместо события «загрузка» окна, и, используя несколько произвольный выбор в 300 миллисекунд, функция работает, что наводит меня на мысль, что я был Правильно, если клиент загружается медленнее, чем страница. Все еще ищу какие-либо предложения об обходном пути, если кому-то интересно!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...