2014-10-02 538 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); 
     } 
    }; 
相关问题