2014-10-02 142 views
1

我在我的angularjs網站上有一個twitter認證。我想到的問題是,當我按下「使用twitter登錄」時,彈出窗口會顯示Twitter內容,但彈出窗口會被阻止。瀏覽谷歌沒有給出任何有用的結果。這裏是一些我的代碼:Twitter登錄彈出窗口被阻止

HTML:

<a ng-show="!user.twitterUserLogged" ng-click="TwitterLogIn()" ... > 
<i class="fa fa-twitter-square"></i></a> 

控制器:

$scope.TwitterLogIn = function() { 
     if(!$scope.user.twitterUserLogged){ 

      TwitterTweetManager.getToken().then(function(token) { 
       $scope.user.TwitterToken = token; 
       var url = 'https://api.twitter.com/oauth/authenticate?oauth_token=', 
        params = 'location=0,status=0,width=800,height=600'; 

       var twitter_window = window.open(url + $scope.user.TwitterToken.oauth_token,"twitter_window",params); 

       //if (twitter_window) { 
        var interval = window.setInterval(function() { 
         if (twitter_window.closed) { 
          window.clearInterval(interval); 
          $scope.TwitterLoginFinish(); 
         } 
        }, 1000); 
       //} 

      }); 

     } 

    }; 

謝謝!

找到一些關於window.open()函數的信息。是的,彈出式窗口攔截器僅允許onClick事件?因爲在我的情況下,我有ng-click。這可能是問題的核心嗎?

回答

1

我發現問題所在。這是關於我的ng-click的異步事件。我在點擊事件中從服務器獲取令牌,在這種情況下,彈出式窗口攔截器會阻止您的彈出窗口。所以,現在我得到令牌我的事件之前是這樣的:

var TwitterToken = TwitterTweetManager.getToken().$object; 

我的單擊事件:

$scope.TwitterLogIn = function() { 
     if(!$scope.user.twitterUserLogged && TwitterToken){ 
       $scope.user.TwitterToken = TwitterToken; 
       var url = 'https://api.twitter.com/oauth/authenticate?oauth_token=', 
        params = 'location=0,status=0,width=800,height=600'; 

       var twitter_window = window.open(url + $scope.user.TwitterToken.oauth_token,"twitter_window",params); 

       var interval = window.setInterval(function() { 
        if (twitter_window.closed) { 
         window.clearInterval(interval); 
         $scope.TwitterLoginFinish(); 
        } 
       }, 1000); 
     } 
    }; 
相關問題