点击“赞”按钮后,我的应用如何请求FB权限?

时间:2011-07-11 23:10:48

标签: javascript facebook login popup

我有一个与Facebook整合的网站。主页有一些受欢迎的Like按钮和一个不是的登录按钮。我想在Like按钮上添加一个事件,这将使它们成为事实上的登录按钮 - 也就是说,除了Facebook正在做的所有事情之外,我想借此机会为我的应用程序请求扩展权限。

它不起作用,这就是我所知道的原因:

  1. 我正在使用以下来电收听点击:     FB.Event.subscribe(“edge.create”,function(obj){/ *我的回调* /});
  2. 当Facebook FINISHES处理点击时,会触发edge.create事件。
  3. Facebook异步处理点击,在完成请求 - 响应周期时推迟。
  4. 此异步等待后执行的Javascript代码不属于同一堆栈,并且缺少用户操作赋予的祝福。
  5. Facebook提供请求扩展权限的方法涉及创建弹出窗口,大多数现代浏览器都包含一个弹出窗口阻止程序,它会拒绝用户操作触发的堆栈外的调用。
  6. 此链导致在edge.create上触发的处理程序无法请求扩展权限。我可以想到两类解决方案:

    1. 找一种方法来听取原始点击,而不是在Facebook收到点击后,发送请求,收到回复,最后触发全局处理程序
    2. 查找用于请求不涉及弹出窗口的权限的备用UI
    3. 我在研究中找到的任何东西都没有给我一个简单的方法来做其中任何一个。在解决方案1中,FBJS提供了一个addEventListener方法,但据我所知,FBJS与我的情况无关(在我拥有的网站上集成),所以我不能用它来捕获点击。在解决方案2中,Facebook自己的FB.login文档说明如下:

      You should only call this on a user event as it opens a popup. Most browsers block popups, unless they were initiated from a user event, such as a click on a button or a link.
      

      (资料来源:https://developers.facebook.com/docs/reference/javascript/FB.login/

      所以我处于死胡同,但这似乎是一个非常人为的问题 - Facebook是否希望我能够在点击“赞”按钮时请求权限?如果是这样,我错过了什么?如果没有,为什么他们在UI层实现这个限制?

1 个答案:

答案 0 :(得分:2)

Facebook Like按钮存在于<iframe>内。因此,您无法捕获或截取按钮的点击事件,甚至无法在<iframe>本身上点击事件。

也许您可以启动页面显示您自己的按钮看起来像Facebook Like按钮,然后您可以正常处理这些按钮。您可以连接它们,以便在第一次单击时它们请求权限,然后用实际的Like按钮替换所有自定义的Like按钮。