1

USER_AGENT文字列を解析せずに、自分のWebサイトがモバイルデバイスで使用されているかどうかを検出した後、ユーザーを1024以上の解像度に最適化されたページ(たとえば、9.7 "、10.1"タブレット)にリダイレクトするか、リダイレクトします。 1024未満の解像度に最適化されたページへのユーザー(たとえば、携帯電話や5 "、7"、8 "タブレット)

これを実現するには、JavaScriptで画面解像度を取得する必要があります。

PHP(USER_AGENTパーサースクリプト)がjavascriptの前に実行されることはわかっていますが、パーサーの前に画面解像度を取得する必要があります。Webサーバーが最初にINDEX.HTMLを実行し、次にINDEX.PHPを実行することを知っているので、画面幅を取得し、POSTを使用してフォームを介して渡すIndex.htmlファイルを作成しました($ _GETではなくアドレスバーをクリーンに保つため)。次に、正しいWebページをロード(含む)するIndex.php。

INDEX.HTML

<body onload="document.form.submit();">
    <form name="form" action="index.php" method="POST">
         <input type="hidden" id="height" name="height" value="" />
    </form>
    <script type="text/javascript">
         document.getElementById('height').value = screen.height;
    </script>
</body>

INDEX.PHP

<?php
     $useragent=$_SERVER['HTTP_USER_AGENT'];
     // If it's a mobile device...
    if(preg_match(...) {
        // If the device screen height is => 1024 it's a tablet 8", 9.7" or 10.1"
        if ($_POST['height'] >= 1024) {
            include ('include.tablet.php');
        }
        // If the device screen height is < 1024 it's a smartphone or a tablet 5" o 7")...
        else {
            include ('include.smartphone.php');
        }
    }
    // If it's a desktop PC...
    else {
            include ('include.index.php');
        }
    }
?>  

今、私はHTMLファイルなしで同じことをしようとしています。screen.widthを取得し、$ _ SERVER ['PHP_SELF']を使用してそれ自体に送信するindex.phpファイルを作成しました。これにより、PHPコードがユーザーを正しいページにリダイレクトできるようになります。

<body onload="document.form.submit();">
    <form name="form" action="<?php echo $_SERVER['PHP_SELF']; ?>" method="POST">
        <input type="hidden" id="height" name="height" value="" />
    </form>
    <script type="text/javascript">
        document.getElementById('height').value = screen.height;
    </script>
    <?php if(isset($_POST['height'])) {
                // conditional include
    } ?>
</body>

問題は、メソッドは機能しますが、ブラウザ(Firefox)がページを実行して結果を返すのに1〜2秒かかることです。なんで?

JAVASCRIPT、JQUERYなし: javascriptパーサーを使用して、「window.location.href」を使用して正しいページにリダイレクトできることはわかっていますが、ホームページを常に「index.php」にし、indexで始まらないようにします。Tablet.phpまたはsmartphone.phpにリダイレクトするphp 。私はコードをエレガントに保とうとしています。

なにか提案を?

4

1 に答える 1

1

JSを再度ロードしないように、変数を確認してください。

<body>
    <form name="form" action="<?php echo $_SERVER['PHP_SELF']; ?>" method="POST">
        <input type="hidden" id="height" name="height" value="" />
    </form>
    <?php if(isset($_POST['height'])) { 
        echo $_POST['height']; 
     } else { 
    ?>
        <script type="text/javascript">
        document.getElementById('height').value = screen.height;
        document.form.submit();
       </script>
    <?php
     }
    ?>
</body>

代替:

このようにファイルでjavascriptとjQueryを使用してみてください。

<!-- include jQuery -->
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.5.1/jquery.min.js"></script&gt;

<!-- execute it when the document is ready -->
<script type="text/javascript">
$(document).ready(function(){
     if($(window).height() > 1024){
             window.location = "http://pc.yoursite.com";
     }
});
</script>

jQuery以外のオプション(ほとんどの場合幅を使用し、デバイスの向きによって異なる場合があります):

<script type="text/javascript">
if (screen.width < 1024 || navigator.userAgent.toLowerCase().indexOf('android')!=-1)
(window.location.replace("http://www.yoursite.com"));
</script>

もう1つのオプションは、CSSでメタビューポートタグと@mediaクエリを使用することですが、探しているリダイレクトはありません。

于 2012-07-25T14:30:27.487 に答える