それは自分の質問に答えるために、適切なエチケットだかどうかわからないが、私はHassouの答えとJavaScript、PHP検出スクリプトのコンボで答えを見つけました。
は私が変更されたスクリプトはこちらから: はhttp://snippets.bluejon.co.uk/check4-js-and-cookies/check4-js-enabled-v2-phpcode.php
基本的な考え方は、結果はあなたにはJavaScriptが有効になっている場合...しかし、アイデアはでき告げる現在のURLを参照してフォームを送信するためにJavaScriptを使用することですiframe内でjavascriptが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文からフォーム生成ブロックを分離し、表示出力の前にコードよりも上のものを使用すると、処理が簡単になる場合があります。上記のコードはテストされておらず、ちょうど同じ問題を持つ他の人のための基本的なアイデアを提供するために与えられていることに注意してください。
はい、それは動作する可能性があります、初期ページの読み込みは、モバイルサイトのデザインを介して読み込むように教えてくれるfacebook $ _POST varを受け取ることができます。その後、ajaxスクリプトは各ページリクエストを実行して、それがまだFacebookからのものであるというフラグを送信することができます。しかし、それは依然として識別のために1ページの遅れを生じるので、実際にページロードの前にそのフラグを送信することが好ましいでしょう。サーバーサイドのように、それは可能だとは思いません。しかし、それは私が今までに見てきた最良のアイデアです、私はまだ他のアイデアに開いている方法を使用して調査します。 –