1

我正在使用 SC HTML5 播放器,当一个声音结束时,我加载另一个源,但是 FINISH 事件似乎只为第一首歌触发,我的代码如下

//Set the source
document.getElementById("sc-widget").src = scPath;
//get the widget reference
var widgetIframe = document.getElementById('sc-widget'),
widget       = SC.Widget(widgetIframe);
//set the finish event
widget.bind(SC.Widget.Events.FINISH, endSC);

function endSC() {
                    var scPath = "http://w.soundcloud.com/player/?url=http%3A%2F%2Fapi.soundcloud.com%2Ftracks%2F1848538&show_artwork=true&auto_play=true";
                    document.getElementById("sc-widget").src = scPath;
                    var widgetIframe = document.getElementById('sc-widget'),
                    widget       = SC.Widget(widgetIframe);
                    widget.bind(SC.Widget.Events.FINISH, endSC);
}

我尝试将 endSC 目标设置为另一个函数,但这不起作用,我错过了什么?谢谢!

4

1 回答 1

2

我有同样的问题。SC.Widget 方法在我第一次调用它时工作正常,但如果我第二次尝试调用它,控制台将在http://中触发“Uncaught TypeError: Cannot read property 'parentWindow' of null”错误w.soundcloud.com/player/api.js脚本。这就是 api.js 脚本停止操作(.Widget、.bind 等)的地方

我找到了解决方案。这很奇怪,但它是一个解决方案。SoundCloud 远程脚本被缩小。在浏览器中加载,在一些在线js美化器中C/P并保存在本地。编辑第 103 行如下:

return a.contentWindow;// || a.contentDocument.parentWindow

所以我删除了那个 .parentWindow 调用。

保存文件并在页面的 head 部分中调用它。就是这样!现在 FINISH 事件在每个加载的小部件上触发。

我希望这将有所帮助。

于 2012-07-02T12:48:58.210 回答