2016-10-18 8 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」関数も定義されています。

ウィンドウが正常に起動します。ただし、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(); 

もちろん、これはあなたがいくつかを持っていることを期待している場合ので注意してください、呼び出し元ウィンドウでグローバルスコープを変更しますこれらのビューのうちの1つを同時に表示します。

(テストする必要があります)もう一つの選択肢、それは異例だとクロスブラウザ

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

関連する問題