我能否以某种方式检查某个页面是否在Facebook标签内?

时间:2014-01-08 15:21:55

标签: javascript facebook

我有一个网页,有时可以从Facebook页面标签(不是Facebook应用程序)访问,有时可以正常访问网页。

我知道facebook通过FB对象向应用程序发送了一堆数据,我已经将其用于其他一些信息,比如滚动。有没有办法找出页面是否在Facebook页面选项卡内?它是一个iframe,所以我无法检查网址。

1 个答案:

答案 0 :(得分:2)

执行此操作的标准方法是您需要检查是否存在已签名的请求。这是Facebook发送给您的服务器的POST变量,遗憾的是,它无法被JavaScript读取。有关从签名请求中读取数据的信息,请查看this Facebook help page。如果您不想注册应用程序或解码数据,只需检查$_POST['signed_request']是否已设置。

但是,经过进一步调查,看起来我们可以测试一下我们是否在JavaScript中的Canvas / Page-tab上。 FB JS SDK有一个名为FB.Canvas.getPageInfo的函数。如果您在Canvas或Page-tab中,则此函数将调用您提供的回调;如果您不在Facebook之外,则不会触发回调:

 $('#pageInfo').click(function() {

  var displayType = 'external';

  FB.Canvas.getPageInfo(function(response) {
    displayType = 'canvas/page-tab';
  });

  setTimeout(function() {
    console.log('we are running ' + displayType);
  }, 1000);

});

回调是异步的,所以你必须适应它。另外,我认为没有办法检测页面选项卡或画布之间的区别。您可以查看对getPageInfo的响应中的属性,但我认为Canvas / Page-tab中没有任何独特的东西。

当然,另一种方法是在Canvas和Page-tab的URL中添加一个额外的参数,然后阅读:

enter image description here enter image description here

function getURLParameter(name) {
  return decodeURIComponent((new RegExp('[?|&]' + name + '=' + '([^&;]+?)(&|#|;|$)').exec(location.search)||[,""])[1].replace(/\+/g, '%20'))||null
}

console.log(getURLParameter('type'));