-1

私は IE 10 で動作しないため、正しいコード パッセージを探しています。stackoverflow を検索し、インターネットで何時間も費やしましたが、問題は同じではありません (MSDN のヒントには、すべてのコード例でエラーがありました! )

これが私のphpコードです:

<?php
$ua = $_SERVER['HTTP_USER_AGENT'];
if (strpos($ua,'MSIE') != false && strpos($ua,'Opera') === false) {
    if (strpos($ua,'Windows NT 5.2') != false) {
        if(strpos($ua,'.NET CLR') === false) return;
        }
        if (substr($ua,strpos($ua,'MSIE')+5,1) < 7){
            header('Location: http://www.domain.org/xxxx/browser.html');
            exit;
        }
    }
?>

このコードは、IE 10 を除くすべての IE バージョンで機能します。IE 10 がハングし、リダイレクト ページ browser.html の URL を含む空白のページが表示されます。

IE6 および IE 7 では、browser.html に、IE のバージョンをアップグレードする必要があるというメッセージが表示されます。

このコードの何が問題になっていますか?? 条件付きコメントを使用できることはわかっていますが、私の場合はリダイレクトの方が適しています。

4

3 に答える 3

1

私の知る限り、InternetExplorer10は.NETCLR情報をユーザーエージェント文字列で送信しなくなりました。最初にこれを削除してみてください:

if(strpos($ua,'.NET CLR') === false) return;
}
于 2013-02-08T22:10:44.603 に答える
0

わかりました、私は解決策を持っています!コードのパッセージとは関係ありません。

if (strpos($ua,'Windows NT 5.2') != false)

また

if(strpos($ua,'.NET CLR') === false) return;

問題はオンライン

 if (substr($ua,strpos($ua,'MSIE')+5,1) < 7){

Internet Explorer 10 は、数学記号 < を認識しません。

次のように書くと:

if ((substr($ua,strpos($ua,'MSIE')+5,1) == 6) || (substr($ua,strpos($ua,'MSIE')+5,1) == 7)) 

コードは機能します!

したがって、IE6 および IE7 (ページ browser.html にリダイレクト) および IE8、IE9 および IE10 (および ie 以外のすべてのブラウザー) で動作するコード全体を以下に示します。

<?php
$ua = $_SERVER['HTTP_USER_AGENT'];
if (strpos($ua,'MSIE') != false && strpos($ua,'Opera') === false){
    if ((substr($ua,strpos($ua,'MSIE')+5,1) == 6) || (substr($ua,strpos($ua,'MSIE')+5,1) == 7)) 
    {
        header('Location: http://www.domain.org/xxxx/browser.html');
        exit;
    }
}
?>

したがって、上記の最初の 2 行を挿入できます。これらの 2 行でも動作しますが、使用するコードが少ないほど良いと思いました :-)

多分他の人もそれをテストするでしょう。私の仮想Windows 7では、問題は解決しました。

于 2013-02-11T10:58:39.140 に答える
0

これらは、IE ユーザー エージェントの 2 つの例です。

Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident/5.0)

Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; [platform token] Trident/6.0; Touch)

ご覧のとおり、次の行で IE のバージョンを検出しようとすると問題が発生します。

if (substr($ua,strpos($ua,'MSIE')+5,1) < 7){

バージョンの場合、10.0のみsubstr($ua,strpos($ua,'MSIE')+5,1)一致1し、そうではない10ため1 < 7です。

これを修正する簡単な方法は次のとおりです。

preg_match('#MSIE ([0-9]{1,2}\.[0-9]{0,2});#si',$ua,$m);
if ($m[1] < 7) {
  [your code]
}
于 2013-03-04T14:06:57.450 に答える