2011-04-04 35 views

回答

3
if($_SERVER['HTTP_REFERER'] == "http://apps.facebook.com/forwardmyinfo/"){ 
    do something 
} 

编辑:

因此,这里是充实多一点(这是我后来发现的)和解决方案的问题。

如果您的页面比Facebook的标准iframe宽度(758px?)更宽,则当应用程序加载到Facebook iframe中时,您的页面将挂起iframe的右侧。

我上面的答案肯定会检测到您正在加载我的Facebook应用程序(假设它为​​),但仅限于您的着陆页。一旦你点击网站 - 这是一个真正的应用程序,它会将引用者视为网站...而不是Facebook。

我的解决办法是在加载主页更改样式表,但更重要的是,设置可以在其他页面测试会话变量:

if($_SERVER['HTTP_REFERER'] == "http://apps.facebook.com/forwardmyinfo/"){ 
    echo '<link href="includes/facebook.css" rel="stylesheet" type="text/css" media="Screen"/>'; 
    $_SESSION["FB"] = true; 
    //do other stuff if needed 
} 
else{ 
    //load original style sheet or whatever 
} 

其余部分是显而易见的,但在这里这是无论如何:

在所有其他网页包括此代码:

if($_SESSION["FB"]){ 
    echo '<link href="includes/facebook.css" rel="stylesheet" type="text/css" media="Screen"/>'; 
    //do other stuff if needed 
} 
else{ 
    //load original style sheet 
} 

别忘了你也要去在每个页面上需要session_start()。

希望能帮助别人。的

ifaour的ssuggestion:

if(isset($_REQUEST['signed_request'])) 

也可以工作,但如果该变量是从页传递到页,因此它不会通过该网站进行我不知道。它确实需要测试,但我对我的结果感到满意。

+0

发现我自己的答案 – Steve 2011-04-04 07:16:00

+0

您可以发布您的答案?其他人可能会遇到同样的问题!这是因为它是关于;) – 2011-04-04 07:18:30

+1

-.- oooop对不起我的不好 – 2011-04-04 07:25:31

1

有复杂的方式,简单的方法。

简单的方法是简单地告诉你的页面链接来自Facebook的Facebook给予一个唯一的URL。

http://server/page?source=Facebook 

然后检查您的_GET范围。

这也将有助于记录。

1

一个简单可靠的方法是设置一个get参数。 如果你的网页的网址是

htttp://whatever.com/page.php 

让Facebook链接

htttp://whatever.com/page.php?ref=facebook 

在会话开始,你可以测试是否该设置。

if(@$_GET['ref']){ 
    if($_GET['ref']=='facebook'){ 
    //change display 
    } 
} 

使用没有固定像素大小的相对布局将是更好的选择。

+0

是的,查询字符串技术也可以工作 - 它是非常相同的事情,检查引用或检查查询字符串。我想有多种解决方案。可以在这里记录几个人以便人们看到它们,这是好事。没有太多关于这方面的信息。 – Steve 2011-04-05 11:20:52

0

或使用这种标准的方式!

Facebook将永远向您发送signed_request

if(isset($_REQUEST['signed_request'])) 
相关问题