Soundcloud JS API连接方法不起作用

时间:2015-06-11 17:48:29

标签: javascript jquery soundcloud

根据docs,我试图让客户端应用程序从soundcloud获取曲目 我已将<script src='http://connect.soundcloud.com/sdk.js'></script>添加到我网站的<head>。并在文档中向我的js添加了以下代码。

//I've replaced YOUR_CLIENT_ID with my client id I got when registered my app and http://example.com/callback with my callback.html also I've filled redirect uri field with it.
    SC.initialize({
      client_id: 'YOUR_CLIENT_ID',
      redirect_uri: 'http://example.com/callback'
    });

    // initiate auth popup
    SC.connect(function() {
      SC.get('/me', function(me) {
        alert('Hello, ' + me.username);
      });
    });

我也创建了callback.html

<html lang="en">
  <head><meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <title>Connect with SoundCloud</title>
  </head>
  <body onload="window.opener.setTimeout(window.opener.SC.connectCallback, 1)">
    <b style="width: 100%; text-align: center;">This popup should automatically close in a few seconds</b>
  </body>
</html>

现在我进入弹出窗口,我可以输入我的电子邮件和密码,当我输入它时,我收到消息:此弹出窗口应该会在几秒钟内自动关闭。但它还没有结束。在控制台中,我收到了消息:

Uncaught SecurityError: Blocked a frame with origin "http://sscopin.temp.swtest.ru" from accessing a frame with origin "swappedout://".  The frame requesting access has a protocol of "http", the frame being accessed has a protocol of "swappedout". Protocols must match

此外,我没有看到任何警报,所以我认为它没有连接。而SC的console.log也显示SC对象。 解决方案?建议?

3 个答案:

答案 0 :(得分:3)

在Soundcloud的示例callback.html中,代码为:

<body onload="window.opener.setTimeout(window.opener.SC.connectCallback, 1)">

必须改为:

<body onload="window.setTimeout(window.opener.SC.connectCallback, 1)">

如果应用程序设置正确配置到同一域(localhost或生产,但不是两者的混合),这允许弹出窗口正确关闭并完成登录流程。

答案 1 :(得分:1)

错误本身就是提到解决方案。确保重定向网址和导致弹出窗口的网页具有相同的网址格式,包括http://等协议

E.g:

导致登录弹出的网址:http://www.example.com/soundcloud.php

回调网址:http://www.example.com/callback.php

如果您忘记编写httpwww,则window.opener对象将无效,无法识别子窗口。

答案 2 :(得分:0)

阅读更多文档。 Here我发现,没有必要使用rederict_uri。只有client_id。 另外here我已经找到了如何获取人们上传的曲目。 所以,这很简单。 要播放用户的曲目,我们应该: 1.使用我们在注册申请后获得的client_id初始化对象。

    SC.initialize({
        client_id: 'my_client_id'
    });
  1. 要获得曲目ID,我们应该:

    SC.get('/users/Username/tracks', {limit: 100}, function(tracks){
            console.log(tracks);
    });
    
  2. 用户名位于soundcloud的设置&gt;个人资料&gt;个人资料网址中。轨道是一个对象列表,其中有一个我们可以使用的id属性  3.单击

    添加曲目播放
    $('#loadTracks').live('click', function(){
        SC.stream('/tracks/track_id', function(sound){
            sound.play();
        });
    });