当使用http访问我的facebook iframe页面时,我如何才能获得Modal而不是弹出窗口
How can I get a Modal rather than a pop up when using http to access my facebook iframe page?
使用fb时。UI https托管的iframe页面提供了一个适当的模式对话框,但通过http的同一页面提供了弹出的
这是我的代码,主要来自facebook对话框的帮助页面:
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:fb="https://www.facebook.com/2008/fbml">
<head>
<title>My Feed Dialog Page</title>
</head>
<body>
<p>oh, hello.</p>
<div id='fb-root'></div>
<script src='//connect.facebook.net/en_US/all.js'></script>
<p><a onclick='postToFeed(); return false;'>Post to Feed</a></p>
<p id='msg'></p>
<script>
FB.init({appId: "myappid", status: true, cookie: true});
function postToFeed() {
// calling the API ...
var obj = {
method: 'feed',
link: 'http://www.facebook.com/testapp/app_myappid/',
picture: 'http://fbrell.com/f8.jpg',
name: 'Facebook Dialogs',
caption: 'Reference Documentation',
description: 'Using Dialogs to interact with users.',
};
function callback(response) {
document.getElementById('msg').innerHTML = "Post ID: " + response['post_id'];
}
FB.ui(obj, callback);
}
</script>
</body>
</html>
所以当我通过https://www.facebook.com/testapp/app_myappid我得到了一个合适的模态对话框,但是http://www.facebook.com/testapp/app_myappid发出可怕的弹出声。
您是否尝试添加显示参数,如下所示:
var obj = {
method: 'feed',
link: 'http://www.facebook.com/testapp/app_myappid/',
picture: 'http://fbrell.com/f8.jpg',
name: 'Facebook Dialogs',
caption: 'Reference Documentation',
description: 'Using Dialogs to interact with users.',
display: 'iframe'
};
...
FB.ui(obj, callback);
参考:https://developers.facebook.com/docs/reference/dialogs/
编辑
正如它在我发布的同一份文件中所说:
如果指定iframe,则必须具有有效的access_token。
查看您的代码,您似乎确实跳过了身份验证过程。你看,你不能只调用FB.init然后开始使用api,你需要要求SDK对用户进行身份验证。
有一些方法可以做到这一点,您应该查看客户端身份验证文档以了解更多信息。这是您修改后的代码,我添加了使用SDK的FB.login方法,它声明:
调用FB.login导致JS SDK尝试打开弹出窗口窗因此,只应在用户单击后调用此方法事件,否则弹出窗口将被大多数浏览器阻止。
因此,你可能需要授权这个弹出窗口才能工作,实际上你应该使用另一种方法(如客户端auth-doc中所讨论的),或者在用户点击某个东西后调用这个方法。这只是为了给你一个正确的方向:
function callback(response) {
document.getElementById('msg').innerHTML = "Post ID: " + response['post_id'];
}
function postToFeed() {
// calling the API ...
var obj = {
method: 'feed',
link: 'http://www.facebook.com/testapp/app_myappid/',
picture: 'http://fbrell.com/f8.jpg',
name: 'Facebook Dialogs',
caption: 'Reference Documentation',
description: 'Using Dialogs to interact with users.',
};
FB.ui(obj, callback);
}
FB.init({
appId: "myappid",
status: true,
cookie: true
});
FB.login(function(response) {
if (response.authResponse) {
postToFeed();
}
else {
alert("user NOT logged in");
}
});
第二次编辑
由于这是一个画布应用程序,并且您希望避免登录弹出窗口,因此还有另一个解决方案。
如果你收到错误消息,这意味着你(可能)缺少客户端身份验证,你可以从服务器端传递访问令牌,并在客户端中使用它,或者你可以做这样的事情:
window.fbAsyncInit = function() {
FB.init({
appId: "myappid",
status: true,
cookie: true
});
FB.getLoginStatus(function(response) {
if (response.status === "connected") {
postToFeed();
}
else {
console.log("not logged in to facebook or hasn't authorized the app");
}
};
};
function postToFeed() {
// calling the API ...
var obj = {
method: 'feed',
link: 'http://www.facebook.com/testapp/app_myappid/',
picture: 'http://fbrell.com/f8.jpg',
name: 'Facebook Dialogs',
caption: 'Reference Documentation',
description: 'Using Dialogs to interact with users.',
};
function callback(response) {
document.getElementById('msg').innerHTML = "Post ID: " + response['post_id'];
}
FB.ui(obj, callback);
}
这不会打开弹出窗口或任何类似的东西,只会检查用户登录状态。您可以阅读更多关于FB.getLoginStatus方法的信息。
此外,我建议在初始化js-sdk时使用Channel File参数。在这种情况下应该没有任何区别,但更安全。
- 创建一个类似链接的按钮,并通过Javascript函数打开一个新的弹出窗口
- 防止Iframe窗体在新窗口中打开
- 内部分区字体大小获胜'调整浏览器窗口大小时不会随媒体查询而更改
- 如何在Bootstrap Modal中为动态点击生成的变量设置jade属性
- 调整窗口大小时,可拖动的对象会出现在容器外部
- Javascript排序的图像弹出窗口..可以't单独弹出
- 窗口大小html css
- 弹出窗口出现,然后退出
- 为什么不是't窗口.恢复正常工作吗?(javascript/jquery)
- 如何制作Connected Modal窗口
- 如何准确地知道打开了哪个Foundation Modal窗口
- 使用点击和窗口散列在Reveal Modal中重新初始化Zurb均衡器
- UI Bootstrap Modal 弹出窗口无法在 AngularJS 中正常工作
- 当使用http访问我的facebook iframe页面时,我如何才能获得Modal而不是弹出窗口
- 将Modal定位到当前窗口-jQuery
- Foundation Reveal Modal弹出窗口正在关闭
- 在JQuery中关闭Modal后关闭父窗口
- Twitter Bootstrap Modal在Rails中不显示窗口
- 我怎么能强迫我的$modal窗口在主作用域上创建对象
- 在Django Bootstrap Modal窗口中编辑记录