0

我有一个带有邀请按钮的页面选项卡应用程序(又名 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 怪癖?

4

1 回答 1

5

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

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

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

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

除非对于“页面选项卡”和“桌面浏览器”的神秘组合,自动选择是“不显示,没有警告或错误消息”。

作为记录,适当的画布应用程序没有此限制。我在完整的应用程序中逐行使用相同的代码,一切正常。

于 2012-06-03T18:01:37.073 回答