1

SoundCloud Widget API に問題があります。

何らかの理由で Event.PLAY が機能しなくなりました...

var i, song, iframes = document.getElementsByTagName('iframe');

for (i = 0; i < iframes.length; i++) {
    if (String.prototype.indexOf.call(iframes[i].src, '//w.soundcloud.com/player') > -1) 
    {           
        iframes[i].id = "sc_player_"+i;
        song = SC.Widget(iframes[i].id);                    
        song.bind(SC.Widget.Events.PLAY, function(eventData){               
            song.getCurrentSound(function(sound) {
                console.log(sound.title);
            });
        });
    }
}
4

1 に答える 1

1

ご報告いただきありがとうございます。現在、最初の再生で PLAY イベントが発生しない理由を調査しています。

UPDPLAY最初のプレイでイベントが発生しないというバグが修正されました。

余談ですが、コードに問題があります。ループ内で作成している関数 (イベント ハンドラー) はすべて、最後の iframe を として参照しsongます。現在のパラメーターとして渡す IFFE でイベント ハンドラーの作成をラップする必要がありますsong

for (i = 0; i < iframes.length; i++) {
    if (src.indexOf('//w.soundcloud.com/player') > -1) {           
        iframes[i].id = "sc_player_"+i;
        song = SC.Widget(iframes[i].id);
        song.bind(SC.Widget.Events.PLAY, (function (song) {
            return function(eventData){               
                song.getCurrentSound(function(sound) {
                    console.log(sound.title);
                });
            }
        }(song)));
    }
}

または、 right を参照するイベント ハンドラーを返すヘルパー関数を作成しますsong

function createEventHandler (song) {
  // `song` will be “caught” in the closure
  return function (eventData) {
    song.getCurrentSound(function (sound) {
      console.log(sound.title);
    });
  }
}

for (i = 0; i < iframes.length; i++) {
    if (src.indexOf('//w.soundcloud.com/player') > -1) {           
        iframes[i].id = "sc_player_"+i;
        song = SC.Widget(iframes[i].id);
        song.bind(SC.Widget.Events.PLAY, createEventHandler(song));
    }
}
于 2013-09-04T10:20:44.803 に答える