2012-02-12 6 views
0

これはまったく切り詰められています。JQuery/Youtube API - シミュレートされたDOMでの再帰エラーが多すぎます。

私はYoutube JS APIを使用して、曲がいつ終了したかを判断しています。終了したら、次の曲を演奏する方法を呼びたい。この方法は、このフォームで正しく動作

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' 

:ここ

は私のイベントリスナーメソッド(のCoffeeScript)です。ここで

when 0 #song ended 
     if debug then console.log 'Song Ended' 
     $('.next-song').click() 

:曲が終わると、私は次の曲の機能をトリガーするシミュレートされたクリックを追加するコードを変更すると、放火犯のコンソールには、それは私にtoo much recursionエラーやクラッシュを与える。しかし、Song Ended

を表示します次の曲をクリックしたときのコードです。

​​

これはそれです。クラッシュする前に、コンソールに「次の曲がクリックされました」と表示されますが、クラッシュして再帰エラーが多すぎます。どのようにして1行で再帰が起こるのでしょうか?

次の方法はエラーなしで動作するということがさらに混乱します。

$(document).on 'click', '#debug-next-song', -> 
    $('.next-song').click() 

EDIT:私は、シミュレートされたクリックの動作を確認することを目的とそれを作成した見つけたすべてがChromeで正常に動作しますが、完全にFirefoxでクラッシュします。最初のエラーはhttp://t3k.no/betaで確認できます。現在の曲の右側にある「次へ」をクリックすると、正常に動作します。しかし、画面の一番下にある曲を再生して終了するまで待つと、コード$('.next-song').click()が呼び出され、Firefoxがクラッシュします。

+0

クリックはおそらく別の 'window.statechange'呼び出しを引き起こしています。あなたはどこでも遊ぶ事例がありますか? –

+0

これは私が最初に思ったものですが、それがその方法を引き起こすとは私には意味がありません。そうであれば、コンソールは 'if debug then console.log 'を記録する必要があります。Player State Change:状態が変化していたら' + newState'。 私のサイトに壊れたバージョンをアップロードしました:http://t3k.no/beta(曲が終わったときに私のfirefoxがクラッシュすることに注意してください) – CHawk

+0

even weirder:私は自分のサイトにアップロードしました。 ChromeはクラッシュしますがFirefoxをクラッシュします... – CHawk

答えて

1

なぜこのようなことが起こっているのか分かりませんが、あなたのサイトのソースを参照して、クリックで実際にクリックが発生していることに気付きました。なぜこれがうまくいかないのか分かりませんが、それらを2つのステートメントに分ければ、私にとってはうまくいくようです。

変更:

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 
+0

サンドロさんありがとう!それは実際問題の原因となっていました。これは私に、開発者としての大きな弱点を認識させました。私はJSの強い基礎知識なしにCoffeescriptにまっすぐジャンプしたので、コンパイル済みのJSをデバッグすることはできませんでした。私は本当に将来的に働かなければならない何か...もう一度ありがとう!私は20時間であなたの賞金を授与します。 – CHawk

関連する問題