我有一个网页,有时可以从Facebook页面标签(不是Facebook应用程序)访问,有时可以正常访问网页。
我知道facebook通过FB对象向应用程序发送了一堆数据,我已经将其用于其他一些信息,比如滚动。有没有办法找出页面是否在Facebook页面选项卡内?它是一个iframe,所以我无法检查网址。
答案 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中添加一个额外的参数,然后阅读:
function getURLParameter(name) {
return decodeURIComponent((new RegExp('[?|&]' + name + '=' + '([^&;]+?)(&|#|;|$)').exec(location.search)||[,""])[1].replace(/\+/g, '%20'))||null
}
console.log(getURLParameter('type'));