2015-08-25 65 views
0

嗨,我正在使用Cordova InAppBrowser和AngularJS Oauth插件。Cordova InAppBrowser顯示位置酒吧Cordova AngularJS Oauth

當我按下一個正常的鏈接按鈕是這樣的:

<a class="external" ng-href="https://www.website.com/" targe="_blank" >open link</a> 

結合本文:

<script> 
    $(document).ready(function() { 
     // open links in native browser (phonegap); 
     $(document).on('click', '.external', function (event) { 
      event.preventDefault(); 
      window.open($(this).attr('href'), '_blank'); 
      return false; 
     }); 
    }); 
</script> 

,它打開了在應用程序瀏覽器鏈接。在InAppBrowser加載url時,它顯示底部的url位置。所以這是行得通的。

當AngularJS Oauth插件打開InAppBrowser並開始加載Facebook的登錄頁面時,它不會在底部顯示加載url位置。

我試圖在OAuth插件這樣添加"location=yes",但它仍然沒有顯示在底部的URL加載條:

window.open('https://www.website.com/oauth/authorize?client_id=' + clientId + '&redirect_uri=http://localhost/callback&scope=' + appScope.join(",") + '&response_type=code&approval_prompt=force', '_blank', 'location=yes,clearsessioncache=yes,clearcache=yes'); 

我如何可以強制顯示的承重橫條通過OAuth InAppBrowser? 我想要這個的原因是當登錄頁面需要一些時間來加載沒有加載指示,你介意認爲沒有什麼事情發生。

這是基於OAuth的認證功能的模樣與位置= YES:

strava: function(clientId, clientSecret, appScope) { 
       var deferred = $q.defer(); 
       if(window.cordova) { 
        var cordovaMetadata = cordova.require("cordova/plugin_list").metadata; 
        if(cordovaMetadata.hasOwnProperty("cordova-plugin-inappbrowser") === true || cordovaMetadata.hasOwnProperty("org.apache.cordova.inappbrowser") === true) { 
         var browserRef = window.open('https://www.strava.com/oauth/authorize?client_id=' + clientId + '&redirect_uri=http://localhost/callback&scope=' + appScope.join(",") + '&response_type=code&approval_prompt=force', '_blank', 'location=yes,clearsessioncache=yes,clearcache=yes'); 
         browserRef.addEventListener('loadstart', function(event) { 
          if((event.url).indexOf("http://localhost") === 0) { 
           requestToken = (event.url).split("code=")[1]; 
           $http.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded'; 
           $http({method: "post", url: "https://www.strava.com/oauth/token", data: "client_id=" + clientId + "&client_secret=" + clientSecret + "&code=" + requestToken }) 
           .success(function(data) { 
            deferred.resolve(data); 
           }) 
           .error(function(data, status) { 
            deferred.reject("Problem authenticating"); 
           }) 
           .finally(function() { 
            setTimeout(function() { 
             browserRef.close(); 
            }, 10); 
           }); 
          } 
         }); 
         browserRef.addEventListener('exit', function(event) { 
          deferred.reject("The sign in flow was canceled"); 
         }); 
        } else { 
         deferred.reject("Could not find InAppBrowser plugin"); 
        } 
       } else { 
        deferred.reject("Cannot authenticate via a web browser"); 
       } 
       return deferred.promise; 
      }, 
+0

你可以鏈接你正在使用的AngularJS Oauth嗎? – jcesarmobile

+0

我使用https://github.com/nraboy/ng-cordova-oauth – user1242574

+0

在https://github.com/nraboy/ng-cordova-oauth/blob/master/src/oauth.js那裏有很多window.open與位置=否,你確定你改變了是你想要的嗎?還是你改變了所有這些? – jcesarmobile

回答

0

我找到了解決辦法。 我的應用程序加載了兩次oauth插件,一次是通過一個單獨的oauth腳本添加到我的項目中,一次通過ngCordova庫。 ngCordova腳本覆蓋了我添加的oauth腳本,所以這就是爲什麼location = yes不起作用。

我刪除了單獨的oauth腳本,並在ngCordova oauth腳本中將location = no更改爲yes。

相關問題