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

mmd*_*ger 0 facebook facebook-iframe facebook-javascript-sdk

我有一个带有邀请按钮(又名FB.ui - > apprequests)的页面选项卡应用程序,当它运行example.com/pagetab正常时(即,它弹出一个FB.ui朋友选择器窗口等)但是当我指向我的应用程序的页面选项卡时到那里并从Facebook内部加载iframe,没有任何反应.起初我认为按钮没有链接是一个问题,因为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);
}
Run Code Online (Sandbox Code Playgroud)

然后在页面上

<a href="javascript:void(null)" class="invite" onclick="sendInvite()"><div class="facebookButton">Invite</div></a> 
Run Code Online (Sandbox Code Playgroud)

当直接加载页面时,此代码完全按预期工作(弹出可爱的朋友选择器对话框),从iframe加载时不执行任何操作.这是一个错误还是有一些隐藏的设置/ JS怪癖,我没有抓住?

mmd*_*ger 5

在发现相关问题后,(发送对话框在页面选项卡中不起作用)我意识到问题是您需要display : 'popup'在选项中手动包含参数,因此工作代码需要:

function sendInvite() {
    FB.ui({method: 'apprequests',
        title: 'Check out this great app!',
        message: 'Join the fun!',
        display: 'popup'
    }, inviteCallback);
}
Run Code Online (Sandbox Code Playgroud)

这种行为明显违背了文档 所说的应该发生的事情:

平台对话框都可以在Web和移动Web上的各种显示上下文中无缝运行.如果您使用JS,iOS或Android SDK调用Dialog,将根据平台和用户使用的设备自动为您选择显示模式.

除非"页面选项卡"和"桌面浏览器"的晦涩组合自动选择"无显示,没有警告或错误消息".

为了记录,适当的画布应用程序没有此限制.我在一个完整的应用程序中使用了line-for-line相同的代码,一切正常.