2013-02-08 119 views
-1

我正在尋找一個正確的代碼段落,因爲我的IE 10不工作。我搜索了stackoverflow,並在互聯網上花了很多時間,但問題不一樣(以及MSDN上的提示對所有的代碼示例錯誤)HTTP_USER_AGENT位置Internet Explorer 10

這裏是我的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瀏覽器除IE以外10! IE 10掛起,顯示帶重定向頁面browser.html的網址的空白頁面。

使用IE6和IE 7時,您會看到browser.html文件,並提示您應升級IE版本。

這段代碼有什麼問題?我知道我可以使用條件註釋,但重定向對我的情況會更好。

+0

開始通過解釋你想做的事。你在哪裏將響應狀態更改爲301或302?你知道IE10永遠不會在Windows NT5.2上運行,對吧?你知道除了在CompatView模式下,IE10不會發送.NET CLR令牌,對嗎? – EricLaw 2013-02-08 17:41:48

回答

1

據我所知,Internet Explorer 10不再發送用戶代理字符串中的信息。首先嚐試刪除此:

if(strpos($ua,'.NET CLR') === false) return; 
} 
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; 
    } 
} 
?> 

所以,你可以插入我前面提到的前兩行。它也適用於這兩條線,但我認爲:我使用的代碼越少,越好:-)也許其他人也會測試它。在我的虛擬Windows 7上,問題現在已經解決了。

0

這是IE瀏覽器的用戶代理的兩個例子:

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] 
}