![](/img/trans.png)
[英]Should I handle CODE using Javascript SDK FB.login POP-UP or is it handled automatically to gain the access_token?
[英]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.