2016-07-14 69 views
0

我一直在嘗試運行我的網站的兩個不同變體:一個用於桌面,另一個用於移動。我決定讓它像這樣工作(使用PHP):如果在Windows,Mac或其他桌面操作系統上運行這個HTML。如果在Android,iOS等上運行該HTML。當我通過Windows或Android訪問我的網站時,會運行相應操作系統的HTML。但是,當我通過iPhone或MacBook,無論是iPhone和Mac的代碼到我的網站運行,不管用戶是在iPhone或MacBook的:這裏是我使用的代碼:如何讓php知道它運行在iOS還是MacOS上

<!--HTML for macOS --> 

<?php 
if(preg_match('/macintosh|mac os x/i', $_SERVER['HTTP_USER_AGENT'])) { 

echo' <!--some HTML--> '; } ?> 


<!--HTML for iPhone--> 


    <?php 

     ifif(preg_match('/iphone/i', $_SERVER['HTTP_USER_AGENT'])) { 

     echo' <!--some HTML--> '; } ?> 

如果你想觀察問題,去bamfacts.tk謝謝!

回答

0

您還可以使用JavaScript。

/* Check if mobile */ 

var isMobile = { 
    Android: function() { 
     return navigator.userAgent.match(/Android/i); 
    }, 
    BlackBerry: function() { 
     return navigator.userAgent.match(/BlackBerry/i); 
    }, 
    iOS: function() { 
     return navigator.userAgent.match(/iPhone|iPad|iPod/i); 
    }, 
    Opera: function() { 
     return navigator.userAgent.match(/Opera Mini/i); 
    }, 
    Windows: function() { 
     return navigator.userAgent.match(/IEMobile/i) || navigator.userAgent.match(/WPDesktop/i); 
    }, 
    any: function() { 
     return (isMobile.Android() || isMobile.BlackBerry() || isMobile.iOS() || isMobile.Opera() || isMobile.Windows()); 
    } 
}; 

if(isMobile.any()) 
{ 
//this is mobile 
} 
+0

它沒有檢查OS X設備的子句。 OP想區分iOS和OSX,而​​不是一般的移動平臺。 – NSNoob

4

以下腳本會告訴你它是OS X還是iOS。你只需要看看HTTP_USER_AGENT是什麼,並且在使用一些正則表達式或字符串操作之後,你很好。

<?php 
// Apple detection array 
$Apple = array(); 
$Apple['UA'] = $_SERVER['HTTP_USER_AGENT']; 
$Apple['Device'] = false; 
$Apple['Types'] = array('iOS', 'Macintosh'); 
foreach ($Apple['Types'] as $d => $t) { 
    $Apple[$t] = (strpos($Apple['UA'], $t) !== false); 
    $Apple['Device'] |= $Apple[$t]; 
} 
// is this an Apple device? 
echo 
    "<p>Apple device? ", ($Apple['Device'] ? 'true' : 'false'), 
    "</p><p>iOS? ", ($Apple['iOS'] ? 'true' : 'false'), 
    "</p><p>OS X? ", ($Apple['Macintosh'] ? 'true' : 'false'), 
    '</p>'; 
?> 

您還可以使用Java腳本做到像以下:

var Apple = {}; 
Apple.UA = navigator.userAgent; 
Apple.Device = false; 
Apple.Types = ["iOS", "Macintosh"]; 
for (var d = 0; d < Apple.Types.length; d++) { 
    var t = Apple.Types[d]; 
    Apple[t] = !!Apple.UA.match(new RegExp(t, "i")); 
    Apple.Device = Apple.Device || Apple[t]; 
} 

// is this an Apple device? 
alert(
    "Is it an Apple device? " + Apple.Device + 
    " \nIs it iOS? " + Apple.iOS + 
    " \nIs it OSX? " + Apple.Macintosh 
); 

你可以看到JavaScript的小提琴here

+0

我想感謝您的幫助,但是當我測試這個確切的代碼(和另一個變體)時,我對iPhone真實(我想要的),但也適用於Mac。這是讓我問上述問題的問題。我認爲這與用戶代理字符串,但仍然留給我的問題... –

+0

@Izakthecoder。已更新方法。現在試試。 – NSNoob

+0

你也是正確的,這是因爲用戶代理字符串。對於iphone而言,該字符串也具有「Like Mac OS X」,因爲正則表達式和字符串比較失敗並且對於兩者都成立。對iOS和Macintosh版關鍵字進行操作是可行的,因爲它們是獨一無二的 – NSNoob

0

我不認爲這是一個好主意,爲什麼不使用響應式設計。像Bootstrap的基金會(http://foundation.zurb.com/)(http://getbootstrap.com/)。或者自己做點什麼(http://www.w3schools.com/html/html_responsive.asp

響應基本上意味着網站縮放到訪客正在使用的屏幕格式(手機,平板電腦,鐳拓,大型桌面)。通過這種方式,您的網站正在致力於每個設計,而不是爲每個設計製作網站。

+0

嗯,我確實使用了自適應設計,但我也爲移動設備和桌面設備使用了不同的導航菜單。轉到Bamfacts.tk並使用F12 Chrome Dev。選項來看看我的意思。 –

+0

解釋它。通常我使用兩個菜單和一些CSS(hide-mobile,show-mobile) –

相關問題