繁体   English   中英

FB.login问题,需要显示灯箱而不是弹出窗口,Javascript SDK,iFrame应用程序

[英]FB.login issue, need to show lightbox instead of pop-up, Javascript SDK, iFrame Application

我正在开发一个facebook iFrame应用程序,它将嵌入到facebook页面中。 我已选择iFrame,因为Facebook已弃用FBML。

我的应用程序准备就绪,但我遇到了一个小问题

调用FB.login时,会出现一个弹出窗口。 我的应用程序要求是,无论何时加载,都应该检查用户是否被授权,如果没有,则显示一个Dialog,要求扩展权限/登录

问题:弹出窗口是一个新窗口的形式,Safari默认阻止,因为窗口是通过javascript打开而不是通过点击, 我希望它显示为Facebook通常为fbml应用程序显示的灯箱/阴影

我在http://developers.facebook.com/blog/post/312上看到了

Blockquote为了在连接帐户时提供更一致和安全的用户体验,当用户已经登录到Facebook时,当用户连接您的站点和Facebook之间的帐户时,我们正在更改对话框的行为。 以前,Connect with Facebook对话框出现在浏览器窗口的IFrame“lightbox”中。 在明天的每周代码推送之后,对话框将弹出一个单独的浏览器窗口,其中包含一个地址栏,当用户未登录到Facebook并尝试将帐户与您的站点连接时,该地址栏与用户登录流程相匹配。 这也将使用户更容易识别URL是否值得信赖且来自Facebook。 大段引用

但这个新功能显然无法帮助我。

有什么解决方法吗?

我的代码:

 <script src="http://connect.facebook.net/en_US/all.js"></script>
    <script type="text/javascript">
        FB.init({ appId : '161077430577043', status : true, cookie : true, xfbml  : true });
        FB.getLoginStatus(function(response) {
            // alert("response: " + response.session);
            if (response.session) {
                // alert("response of getlogin status, permissions:  " + response.perms);
                login();
            }
            else{
                document.getElementById('loginStatus').innerHTML = "Login and Grant Permission";
                logMeIn();
            }
        });

        function logMeIn(){
            FB.login(function(response) {
                // alert("login!");
              if (response.session) {
                    // alert("Granted permissions: " + response.perms);
                    login();
                } else {
                    // alert("not logged in");
              }
            }, {perms:'read_stream,publish_stream,offline_access,friends_birthday,email'});
        }
        function login(){    
            FB.api('/me', function(response) {
                document.getElementById('login').innerHTML="Welcome " + response.name;
            });
            getFriendsData();
        }

        function getFriendsData(){
            //  fetches data from Graph API
        }

    </script>

我想出了如何解决这个问题。 现在我使用通过PHP生成的FBML提示和signed_request获取权限。

我错过了一个重要的观点,即一旦授予了权限,无论使用何种sdk,它们都将可用。 即从fbml获取权限并使用它们与PHP

如果从click事件触发FB.login()调用,则浏览器不应阻止新窗口。

就像是:

<button onclick="logMeIn();">Log in with Facebook</button>

和脚本:

function logMeIn() {
    FB.login(...);
}

来自Facebook文档( 链接 ):

如此函数的参考文档中所述,它会生成一个弹出窗口,显示“登录”对话框,因此只应在有人单击HTML按钮时调用(以便浏览器不会阻止弹出窗口)。

我认为出于安全原因,他们不允许登录流程进入iframe。 唯一的方法是将用户重定向到登录页面(替换当前页面)。 这可以在服务器端或客户端完成。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM