Обновление: Если присмотреться к вашему коду, я только что заметил, что fetchTracks
ожидает 3 параметра, а вы передаете только 2. Второй параметр должен быть userId
, а третий должен быть обратным вызовом. Я понятия не имею, что такое userId
, но, предполагая, что это 123
, вы должны запустить функцию следующим образом:
...
fetchTracks(target.data('playlist-id'), "123", function (data) {
audioObject = new Audio(data.tracks.items[0].preview_url);
audioObject.play();
target.addClass('playing');
audioObject.addEventListener('pause', function(){
target.removeClass('playing');
});
});
...
Учитывая, что ваш код, скорее всего, вызывает неработающий URL с точки зрения Spotify (который должен отображаться как ошибка в вашей консоли - скорее всего, 404
, но, возможно, также 403
или 422
).
Первоначальный ответ:
Предполагая, что приведенный выше код является причиной ошибки, в строке 87
(в приведенном выше фрагменте) вы пытаетесь добавить прослушиватель событий для audioObject
. Согласно ошибке, audioObject
не является элементом DOM, но null
. Поэтому вы можете проверить, поддерживает ли элемент метод, прежде чем применять его:
...
if (audioObject)
audioObject.addEventListener('pause', function(){
target.removeClass('playing');
});
или ...
if (audioObject instanceof Element)
audioObject.addEventListener('pause', function(){
target.removeClass('playing');
});
Примечание (в будущем): всякий раз, когда вы решите опубликовать изображения кода вместо самого кода в [SO], ожидайте, что вас проголосуют.
Еще одно примечание : вышеприведенное не исправляет логику вашего приложения, которая явно нарушена (или, по крайней мере, не работает должным образом). Он просто избегает выполнения кода при возникновении ошибки.
Возможно, вы хотите добавить прослушиватель событий внутри fetchTracks()
:
...
fetchTracks(target.data('playlist-id'), function (data) {
audioObject = new Audio(data.tracks.items[0].preview_url);
audioObject.play();
target.addClass('playing');
audioObject.addEventListener('pause', function(){
target.removeClass('playing');
});
});
...
..., но без минимального рабочего примера я не могу быть уверен.