Довольно озадачен этим.
Я использую JS API Youtube, чтобы определить, когда песня закончилась. Когда это закончится, я хочу вызвать метод, который воспроизводит следующую песню.
Вот мой метод прослушивания событий (Coffeescript):
window.statechange = (newstate) ->
debug = true
if debug then console.log 'Player State Change: ' + newState
switch newState
when 0 #song ended
if debug then console.log 'Song Ended'
when 1 #song is playing
if debug then console.log 'Song Playing'
#change the title of the page
document.title = $('#currentSongTitle').html() + ' by ' +
$('#currentSongArtist').html()
when 2 #song is paused
if debug then console.log 'Song Paused'
when 3 #song is buffering
if debug then console.log 'Song Loading'
Метод работает правильно в этой форме. Когда песня заканчивается, консоль FireBug отображает Song Ended
Однако, когда я изменяю код, добавляя имитированный щелчок, который запускает функцию следующей песни, он выдает ошибку too much recursion
и вылетает:
when 0 #song ended
if debug then console.log 'Song Ended'
$('.next-song').click()
Вот код для нажатия следующей песни:
$(document).on 'click', '.next-song', ->
console.log 'Next-song clicked'
Вот и все. Перед сбоем консоль ДОЛЖНА сказать «нажата следующая песня», но затем происходит сбой и выдает слишком много ошибок рекурсии. Как 1 строка может вызвать рекурсию вообще?
Еще более запутанным является то, что следующий метод работает без ошибок. Я создал его с целью убедиться, что симулированный щелчок работает:
$(document).on 'click', '#debug-next-song', ->
$('.next-song').click()
РЕДАКТИРОВАТЬ: обнаружил, что все отлично работает в Chrome, но полностью падает в Firefox. Вы можете увидеть ошибку на собственном опыте в (http://t3k.no/beta). Справа там, где написана текущая песня, нажатие кнопки «Вперед» работает нормально. Но если вы начинаете проигрывать песню в нижней части экрана и ждете ее окончания, введите код $('.next-song').click()
вызывается и вылетает Firefox.