根据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对象。
解决方案?建议?
答案 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
如果您忘记编写http
或www
,则window.opener对象将无效,无法识别子窗口。
答案 2 :(得分:0)
阅读更多文档。 Here我发现,没有必要使用rederict_uri。只有client_id。 另外here我已经找到了如何获取人们上传的曲目。 所以,这很简单。 要播放用户的曲目,我们应该: 1.使用我们在注册申请后获得的client_id初始化对象。
SC.initialize({
client_id: 'my_client_id'
});
要获得曲目ID,我们应该:
SC.get('/users/Username/tracks', {limit: 100}, function(tracks){
console.log(tracks);
});
用户名位于soundcloud的设置&gt;个人资料&gt;个人资料网址中。轨道是一个对象列表,其中有一个我们可以使用的id属性 3.单击
添加曲目播放$('#loadTracks').live('click', function(){
SC.stream('/tracks/track_id', function(sound){
sound.play();
});
});