2014-01-08 40 views
2

我有一个网页,有时可以从facebook pagetab(不是facebook应用程序)访问,有时它可以像平常一样从网页访问。我可以检查某个页面是否在某个Facebook标签内?

我知道Facebook通过FB对象向应用程序发送了一堆数据,我已经使用了其他一些信息,如滚动。有没有什么方法可以找出页面是否在Facebook页面中?这是一个iframe,所以我不能只检查网址。

回答

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-选项卡中有任何特性。

当然,另一种方法是只需添加一个额外的参数,以你的画布和页面标签的网址,然后看这些:我想

enter image description hereenter image description here

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

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

那到底是什么。 .. –

相关问题