我有一个带有邀请按钮(又名FB.ui - > apprequests)的页面选项卡应用程序,当它从example.com/pagetab
运行时工作正常(即,它弹出一个FB.ui朋友选择器窗口等。)但是,当我将应用程序的页面选项卡指向那里并将其作为iframe加载到Facebook中时,没有任何反应。起初我认为按钮没有链接是一个问题,因为jquery不知道哪个文档已经准备就绪但我转而使用onclick
甚至从Chrome控制台输入命令(在iframe的范围内,当然)但没有任何反应......这是一个错误还是我错过了什么?
最小代码:
window.fbAsyncInit = function() {
FB.init({
appId : '123456789', // App ID
channelUrl : '//fbjscache.php', // Channel File
status : true, // check login status
cookie : true, // enable cookies to allow the server to access the session
xfbml : true // parse XFBML
}); };
(function(d){
var js, id = 'facebook-jssdk', ref = d.getElementsByTagName('script')[0];
if (d.getElementById(id)) {return;}
js = d.createElement('script'); js.id = id; js.async = true;
js.src = "//connect.facebook.net/en_US/all.js";
ref.parentNode.insertBefore(js, ref);
}(document));
function sendInvite() {
console.log("Inviting...");
FB.ui({method: 'apprequests',
title: 'Check out this great app!',
message: 'Join the fun!',
}, inviteCallback);
}
然后在页面上
<a href="javascript:void(null)" class="invite" onclick="sendInvite()"><div class="facebookButton">Invite</div></a>
此代码完全按预期工作(弹出可爱的朋友选择器对话框)直接加载页面,并在从iframe加载时不执行任何操作。这是一个错误还是有一些隐藏的设置/ JS怪癖,我没有抓住它?
答案 0 :(得分:5)
在发现相关问题后,(Send dialog doesn't work in page tab)我意识到问题是您需要在选项中手动包含参数display : 'popup'
,因此工作代码需要:
function sendInvite() {
FB.ui({method: 'apprequests',
title: 'Check out this great app!',
message: 'Join the fun!',
display: 'popup'
}, inviteCallback);
}
这种行为明显违背了the docs 所说的应该发生的事情:
平台对话框都可以在Web和移动网络上的各种显示上下文中无缝运行。如果您使用JS,iOS或Android SDK调用Dialog,将根据平台和用户使用的设备自动为您选择显示模式。
除非“页面标签”和“桌面浏览器”的神秘组合自动选择“无显示,没有警告或错误消息”。
为了记录,正确的画布应用程序没有此限制。我在一个完整的应用程序中使用了line-for-line相同的代码,一切正常。