SoundCloud嵌入式轨道:如何在轨道结束播放后刷新页面?

时间:2013-04-25 10:34:37

标签: html5 widget embed embedded-resource soundcloud

首先,我是一个菜鸟。

好的,我已将SoundCloud轨道嵌入到我的网页中。我的问题是,当曲目结束时你如何刷新页面(或做任何其他事情)?

你可以用getDuration(我在SoundCloud API页面上找到它)吗?

我试着编码。在代码中,我试图获取轨道的持续时间,然后将其打印在屏幕/网页上。这段代码有什么问题?

<script src="https://w.soundcloud.com/player/api.js" type="text/javascript"></script>
<span id="headerLeft-content">
    <script type="text/javascript">
        var duration = 0;
        (function(){
              var widgetIframe = document.getElementById('sc-widget'),
              widget = SC.Widget(widgetIframe);
              widget.bind(SC.Widget.Events.READY, function() {
                widget.getDuration(function(val) {
                  duration = val;
                });
              });
        }());

        document.write(duration);
    </script>
</span>

如果有效,我会把等待(持续时间),然后刷新......

换句话说,即使原始小部件不支持循环,也可以将soundcloud嵌入式轨道“黑客”循环(或者在轨道结束后刷新页面,这就是我想要做的事情)?

请看看SoundCloud html5小部件页面,在那里我找到了getDuration命令,看看你是否可以帮助我... =&gt; http://developers.soundcloud.com/docs/api/html5-widget#getters

编辑:

<script>
var html=<iframe blablabla...></iframe>
document.write(html);
</script>

<script src="https://w.soundcloud.com/player/api.js" type="text/javascript"></script>
<script type="text/javascript">
  (function(){
    var widgetIframe = document.getElementById('sc-widget'),
        widget       = SC.Widget(widgetIframe),
    widget.bind(SC.Widget.FINISH, function() {
          window.location.reload(false);
    });
  }());
</script>

曲目结束后页面不会刷新。你能看出什么是错的吗?

3 个答案:

答案 0 :(得分:1)

您可以将函数绑定到SC.Widget.FINISH事件documented here。以下代码段应该有效:

widget.bind(SC.Widget.FINISH, function() {
    window.location.reload(false);
});

当然,如果您只想让小部件循环播放,您可以使用seekToplay方法:

widget.bind(SC.Widget.FINISH, function() {
    // again, again!
    widget.seekTo(0);
    widget.play();
});

这比页面刷新更少侵入。

答案 1 :(得分:0)

widget.bind(SC.Widget.Event.FINISH, function() {
    widget.seekTo(0);
    widget.play();
});

在另一个回复中,第一个参数缺少“.Event”。

答案 2 :(得分:0)

最后。一个真正有效的版本。

GameObject decal = Instantiate(prefab, col.contacts[0].point, Quaternion.Euler(col.contacts[0].normal));
DecalDynamic.BuildDecal(decal.GetComponent<Decal>());