2014-12-10 2 views
3

dev 사이트에있는 SC API에 연결하는 간단한 예제를 따라했습니다. 나는 모든 것을 로컬 서버에서 작동시킬 수 있었지만 이제는 내 웹 사이트로 밀어 넣었습니다. 작동하지 않는 것 같습니다.Soundcloud Javascript API - 연결 window.opener.setTimeout() 작동하지 않습니다

"응용 프로그램에 연결"창이 나타납니다. 연결을 클릭합니다. 그것은 내 'redirect_url'페이지를 보여줍니다 :

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

하지만 결코 해고되지 않는 것 같습니다.

나는 전에 여기 이년에서이 약 SO 질문을 발견 : Javascript SDK connect() function not working in chrome

그리고 상단 대답은 당신이 SC 크롬 응용 프로그램이있는 경우이 작업을 수행하려고 노력하고 청취 시도에 문제가 있다고 임시 해결책으로 '저장 이벤트'.

내 문제는 크롬에 SC 앱이 설치되어 있지 않다는 것입니다. 또한, 내 로컬 서버에서 완벽하게 작동하는 것이 이상하게 보입니다.

아무도 내 웹 호스팅 코드가 어떻게 이것을 죽일 수 있었는지 생각할 수 있습니까? 호스팅 회사에 어떤 이유로 든 window.opener.setTimeout()을 차단합니까?

도움을 미리 감사드립니다.

답변

6

몇 시간의 절망적 인 디버깅을 경험 한 후에 이것을 알아 냈습니다. , call()에 따라서 전화를하지 SC 기능이 window 호출 할 것으로 예상하기 때문에

<!DOCTYPE html> 
<html lang="en"> 
    <head> 
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 
    <title>Connect with SoundCloud</title> 
    </head> 
    <body> 
    <b style="text-align: center;">This popup should automatically close in a few seconds</b> 
    <script type="text/javascript"> 
     window.opener.SC.connectCallback.call(this); 
    </script> 
    </body> 
</html> 

그것은 조금 이상한, 그리고 :

은과 같이, 스크립트 태그에 콜백을 당깁니다.

다른 부분은 this이 팝업 창의 window 개체를 참조해야하므로 그 개체는 window.location.search으로 설정되어 있기 때문입니다.

http://localhost:8080/callback.html?code=<CODE>&state=SoundCloud_Dialog_ca4d6#access_token=<ACCESS TOKEN>&scope=non-expiring 

을 그리고 당신은 window.opener.SC.connectCallback 보면, 그것은 다음과 같습니다 : URL은 다음과 같습니다 그래서

function(){r.notifyDialog(this.location)} 

, this 팝업 창에서 원본이 아닌, 부모 창 될 필요가있다.

당신이 부모 윈도우의 setTimeout은, 그것이 window.location.search 쿼리 매개 변수 (인증 토큰)이없는 부모 윈도우의 window 객체에 this 설정, 호출됩니다에 connectCallback 기능을 전달하는 경우.

잘하면, 그건 의미가 있습니다. 적어도 당신의 문제를 해결해야합니다.

또한, 몸의 온로드 속성을 사용하여 주장하는 경우, 당신은이 그것을 변경할 수 있습니다

<body onload="setTimeout(window.opener.SC.connectCallback)"> 
+0

이 나를 위해 일한 좋은 대답이다. SoundCloud가 비 기능적인 예를 제공하는 이유가 궁금합니다. 누군가는 이것을주의해야합니다. – crunch

+0

나는 그것에 대해 그들에게 트위터를 썼다. 어쩌면 그들은 그것을 곧 해결할 수있을 것입니다. :) – Joshua

+0

@Joshua 최고! 고마워, 너는 무수히 많은 시간을 절약했다. 여기에 쿠키가 있습니다 :). 바라기를 SoundCloud가 곧이 문제를 해결할 것입니다. – Bas

관련 문제