我有一个网页,有时可以从facebook pagetab(不是facebook应用程序)访问,有时它可以像平常一样从网页访问。我可以检查某个页面是否在某个Facebook标签内?
我知道Facebook通过FB对象向应用程序发送了一堆数据,我已经使用了其他一些信息,如滚动。有没有什么方法可以找出页面是否在Facebook页面中?这是一个iframe,所以我不能只检查网址。
我有一个网页,有时可以从facebook pagetab(不是facebook应用程序)访问,有时它可以像平常一样从网页访问。我可以检查某个页面是否在某个Facebook标签内?
我知道Facebook通过FB对象向应用程序发送了一堆数据,我已经使用了其他一些信息,如滚动。有没有什么方法可以找出页面是否在Facebook页面中?这是一个iframe,所以我不能只检查网址。
这样做的标准方法是您需要检查是否存在签名请求。这是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-选项卡中有任何特性。
当然,另一种方法是只需添加一个额外的参数,以你的画布和页面标签的网址,然后看这些:我想
function getURLParameter(name) {
return decodeURIComponent((new RegExp('[?|&]' + name + '=' + '([^&;]+?)(&|#|;|$)').exec(location.search)||[,""])[1].replace(/\+/g, '%20'))||null
}
console.log(getURLParameter('type'));
那到底是什么。 .. –