2016-10-18 3 views
0

백본보기에서 새 창을 시작해야합니다. 내보기 파일에서 HTML 템플릿을 사용 중입니다.백본 js 뷰에서 window.open 사용; 보기 기능에 대한 참조 손실

HTML 템플릿 코드의 덩어리를 가지고 :

<a id="providerIcons"> 
     <div style='display:inline-block; padding-right:30px;text-align: center;'><img width='110' height='110' src='app/assets/images/dropboxLogo.jpg' /><br/>DropBox</div> 
    </a> 

내보기 파일이 이벤트 매핑 설정 :

events: { 
       "click #providerIcons" : "onProvidersClick" 
      }, 

을하고 난 onProvidersClick도보기에 정의되어 있습니다

onProvidersClick: function() { 
       var URL = "https://www.dropbox.com/1/oauth2/authorize?client_id=xyz&response_type=token&redirect_uri=http://localhost:9098/handleOauth.html"; 

       **var oauthwindow = window.open(URL, "SignIn", "width=650,height=550,toolbar=0,scrollbars=0,status=0,resizable=0,location=0,menuBar=0");** 

       oauthwindow.focus(); 
       return false; 
      }, 

이 뷰 파일은 "saveToken"함수도 정의합니다.

saveToken: function() { 
       alert("connectorsmain-view.js; saveToken()"); 
      } 

창이 잘 실행됩니다. 그러나 oAuth 프로세스 (새 창에서 시작됨)에서 콜백/리디렉션이 있으며 oAuth 플로우가 끝날 때 창에 새 HTML 파일을 가리키고로드합니다. window.opener.saveToken이 아니라고 나는 오류를 받고 있어요

var access_token = (window.location.hash||window.location.search).match(/access_token=([^&amp;]+)/); 

     if(access_token){ 
      // Save the first match 
      access_token = decodeURIComponent(access_token[1]); 
      **window.opener.saveToken(access_token);** 
      window.close(); 
     } 

: 내 서버에있는 그 최종 HTML 파일은, 새로운 창을 열어 원래 화면으로 돌아 access_token은 다음 Oauth를 전달하는 스크립트를 가지고 함수. View 파일 레벨에서 "saveToken"fxn을 인식하지 못합니다.

뷰의 템플릿 인 HTML에서 "saveToken"함수를 정의하면 예상대로 작동합니다. 그러나 템플릿 파일이 아니라 View 파일에 함수가 필요합니다.

모든 의견에 진심으로 감사드립니다.

답변

1

이런 식으로 뭔가 작업을해야합니다 :

var oauthwindow = window.open(URL, "SignIn", "width=650,height=550,toolbar=0,scrollbars=0,status=0,resizable=0,location=0,menuBar=0");** 

window.openerView = this; 
oauthwindow.focus(); 

을 다음 자식 창에서 :

window.opener.openerView.saveToken(access_token); 
window.close(); 

분명히이 호출 창에서 전역을 수정, 그래서 당신은 몇 가지를 가질 것으로 예상되는 경우주의 동시에이 견해들 중

또 다른 옵션 (테스트 할 필요가 있음)는 정통 비록, 열린 창의 범위에 오프너보기 참조를 복사하는 것입니다 및 크로스 브라우저에게 그런

var oauthwindow = window.open(URL, "SignIn", "width=650,height=550,toolbar=0,scrollbars=0,status=0,resizable=0,location=0,menuBar=0");** 

oauthwindow.openerView = this; 
oauthwindow.focus(); 

를 작동하지 않을 수 있습니다
window.openerView.saveToken(access_token); 
window.close(); 
+0

그게 효과가 있습니다! – LWinni