不知道這是適當的禮儀回答我的問題,但我找到了答案是Hassou的回答的組合和JavaScript的PHP的檢測腳本。
我修改劇本就是從這裏開始: http://snippets.bluejon.co.uk/check4-js-and-cookies/check4-js-enabled-v2-phpcode.php
本質的想法是使用JavaScript來提交表單引用當前的URL,結果會告訴你,如果啓動Javascript ......不過,這個想法可以只有當javascript在iframe中返回true時才容易被修改爲提交表單。然後,您可以將$ _POST數據傳遞到表單中,以便$ _POST數據可以繼續傳輸(只有在您的應用程序的顯示層中引用$ _POST數據時才需要)。這裏的基本思想是:
<?php
/* Include head of your application goes here, this should do whatever
session handling code you have and all processing done to the $_POST variables */
// ~~~~~~Full Url Function - Works With Mod_Rewrite~~~~~~~~~ //
// important thing is function will grab all $_GET vars
function fullurlnav()
{
$fullurlsortnav = 'http';
$script_name = '';
if(isset($_SERVER['REQUEST_URI']))
{
$script_name = $_SERVER['REQUEST_URI'];
}
else
{
$script_name = $_SERVER['PHP_SELF'];
if($_SERVER['QUERY_STRING']>' ')
{
$script_name .= '?'.$_SERVER['QUERY_STRING'];
}
}
if(isset($_SERVER['HTTPS']) && $_SERVER['HTTPS']=='on')
{
$fullurlsortnav .= 's';
}
$fullurlsortnav .= '://';
if($_SERVER['SERVER_PORT']!='80')
{
$fullurlsortnav .=
$_SERVER['HTTP_HOST'].':'.$_SERVER['SERVER_PORT'].$script_name;
}
else
{
$fullurlsortnav .= $_SERVER['HTTP_HOST'].$script_name;
}
return $fullurlsortnav;
}
// ~~~~~~~~~~~End Full URL Function~~~~~~~~~ //
?>
<html>
<body>
<?php
// Only run this check if user has been identified as a facebook user in their session
// or if they've been identified via the $_POST['signed_request'], which facebook sends
// upon first request via iframe.
// Doing this removes the check when it's unneeded.
if (!isset($_POST['inIframe']) && (isset($_SESSION['inIframe']) || isset($_POST['signed_request'])))
{
?>
<form name="postJs" action="<?php echo fullurlnav(); ?>" method="post">
<input type="hidden" name="inIframe" value="1">
<?php
// Carry over $_POST
foreach($_POST as $key => $value)
{
echo '<input type="hidden" value="'.$value.'" name="'.$key.'" />';
}
?>
</form>
<script type="text/javascript">
<!--
// If in an iframe
if (top !== self)
{
document.postJs.submit();
}
//-->
</script>
<?php
}
elseif(isset($_POST['inIframe']) && (isset($_SESSION['inIframe']) || isset($_POST['signed_request'])))
{
$_SESSION['inIframe']=1;
}
else
{
$_SESSION['inIframe']=0;
}
if ($_SESSION['inIframe']== 1){
echo 'IS in an Iframe';
}else{
echo 'IS NOT in an Iframe';
}
// echo out rest of your template code
?>
</body>
</html>
它變得有點棘手溜冰圍繞你的頁面顯示的代碼輸出和它的運作,但是這是基本的想法,我有這麼遠。從技術上講,可以將表單生成塊從下面的elseif else語句中分離出來,並且在任何顯示輸出之前使用代碼上面的代碼塊,這可能更容易處理。請注意,上面的代碼沒有經過測試,只是爲了給其他人提供同樣問題的基本思路。
是的,這可能會起作用,初始頁面加載可以接收facebook $ _POST var,這將告訴我通過移動網站設計加載它。之後,ajax腳本可以運行每個頁面請求發送一個標誌,它仍然是從Facebook。但是,這仍然會導致識別一頁時間延遲,所以最好在實際的頁面加載之前發送該標誌,例如服務器端,但我認爲這是不可能的。但這是迄今爲止我所見過的最好主意,我會用方法進行調查,儘管對其他想法仍然持開放態度。 – 2012-02-02 14:58:12