对这一个很难过。
我正在使用Youtube JS API来确定歌曲何时结束。当它结束时,我想调用播放下一首歌的方法。
这是我的事件监听器方法(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。
答案 0 :(得分:1)
我不确定为什么会发生这种情况,但是通过您网站上的来源,我注意到您实际上是在回复中触发了点击。我不明白为什么这不起作用,但是如果你将它们分成两个陈述,它似乎对我有用。
变化:
switch (newState) {
case 0:
if (debug) console.log('Song Ended');
return $('.next-song').click();
// ...
为:
switch (newState) {
case 0:
if (debug) console.log('Song Ended');
$('.next-song').click();
return;
// ...
由于您使用的是CoffeeScript,因此可以明确使用return关键字。
when 0 #song ended
if debug then console.log 'Song Ended'
$('.next-song').click()
return