FB.ui apprequest无法在页面选项卡中工作

时间:2012-06-03 12:04:46

标签: facebook facebook-iframe facebook-javascript-sdk

我有一个带有邀请按钮(又名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怪癖,我没有抓住它?

1 个答案:

答案 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相同的代码,一切正常。