Javascript 移动或桌面浏览器检测并重定向到相应的网页
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/6660649/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Mobile or desktop browser detection and redirect to respective web page
提问by user392406
I'm building a website in PHP which contains flash in its index page. I want to redirect users who are accessing my site via any mobile browser to page m.index.php which doesn't contain flash(simple page) for loading purposes. For others who access via desktop browser to index.php which contains flash in it.
我正在用 PHP 构建一个网站,它的索引页中包含 Flash。我想将通过任何移动浏览器访问我的网站的用户重定向到不包含用于加载目的的 flash(简单页面)的页面 m.index.php。对于通过桌面浏览器访问包含 flash 的 index.php 的其他人。
How can I redirect each user based on their platform?
如何根据他们的平台重定向每个用户?
回答by Jacob
You could use .htaccess like in this answeror in this answeror you could check the user-agent in php:
您可以在此答案或此答案中使用 .htaccess ,或者您可以在 php 中检查用户代理:
<?php
$useragent=$_SERVER['HTTP_USER_AGENT'];
if(preg_match('/android|avantgo|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|symbian|treo|up\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino/i',$useragent)||preg_match('/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|e\-|e\/|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(di|rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|xda(\-|2|g)|yas\-|your|zeto|zte\-/i',substr($useragent,0,4)))
header('Location: http://detectmobilebrowser.com/mobile');
?>
Code from detectmobilebrowser.com
回答by Hassaan
Mobile Detectis a lightweight PHP class for detecting mobile devices (including tablets). It uses the User-Agent string combined with specific HTTP headers to detect the mobile environment. Before procedding further, note that, ‘Mobile Detect' class is a server-side (PHP) detection tool, it is not a replacement for Responsive Web Design (media queries) or any other form of client-side feature detection.
Mobile Detect是一个轻量级的 PHP 类,用于检测移动设备(包括平板电脑)。它使用结合特定 HTTP 标头的 User-Agent 字符串来检测移动环境。在进一步讨论之前,请注意,“Mobile Detect”类是一个服务器端 (PHP) 检测工具,它不能替代响应式网页设计(媒体查询)或任何其他形式的客户端功能检测。
Redirecting a site to a mobile version
将网站重定向到移动版本
/* Change path info depending on your file locations */
require_once 'Mobile_Detect.php';
$detect = new Mobile_Detect;
if($detect->isMobile())
{
header('Location: http://mobile.example1.com/');
exit;
}
The above code will now redirect the main site to a mobile version if viewed from a mobile. Some other use cases to redirect are given below.
如果从手机查看,上面的代码现在会将主站点重定向到移动版本。下面给出了重定向的一些其他用例。
// Any tablet device.
if( $detect->isTablet()) {
}
// Exclude tablets.
if( $detect->isMobile() && !$detect->isTablet()) {
}
// Check for a specific platform with the help of the magic methods:
if( $detect->isiOS()) {
}
if( $detect->isAndroidOS()) {
}
if( $detect->isWindowsPhoneOS()) {
}
Loading different resources depending on the device
根据设备加载不同的资源
$detect = new Mobile_Detect;
if($detect->isMobile() || $detect->isTablet()) {
echo "<link rel='stylesheet' href='mobile.css type='text/css' />";
} else {
echo "<link rel='stylesheet' href='style.css type='text/css' />";
}
回答by rhill45
This uses the same command but just less devices:
这使用相同的命令,但设备更少:
<?php $iphone = strpos($_SERVER['HTTP_USER_AGENT'],"iPhone"); $android
= strpos($_SERVER['HTTP_USER_AGENT'],"Android"); $palmpre = strpos($_SERVER['HTTP_USER_AGENT'],"webOS"); $berry = strpos($_SERVER['HTTP_USER_AGENT'],"BlackBerry"); $ipod = strpos($_SERVER['HTTP_USER_AGENT'],"iPod");
if ($iphone || $android || $palmpre || $ipod || $berry == true) {
echo "<script>window.location='http://mblistings.com/mob/index.php'</script>"; } ?>
回答by madesignUK
Thanks for this code snippet, just had a similar need where the differences between Chrome, FF and IE do't stack up, and a simple ccs coding doesn't do the job anymore, so a dedicated HTML page has had to be created for not only Browser, but display sizes so as to cover 4:3 16:9 ratio screens...
感谢这个代码片段,只是有一个类似的需求,即 Chrome、FF 和 IE 之间的差异不叠加,并且一个简单的 ccs 编码不再能胜任这项工作,因此必须创建一个专用的 HTML 页面不仅是浏览器,而且显示尺寸可以覆盖 4:3 16:9 比例的屏幕......
Anyway, using your example, I have developed the php to provide feedback for browser type, build and screen resolution.
无论如何,使用您的示例,我开发了 php 来为浏览器类型、构建和屏幕分辨率提供反馈。
Hope you find this adaptation of use, if anyone improves on it, welcome the improvements as only spent 1hr on this so haven't had the opportunity to specify all the options for the many browser types - so currently is only developed fully for Chrome, IE and FF
希望你能找到这种使用的适应,如果有人改进它,欢迎改进,因为只花了 1 小时,所以没有机会为许多浏览器类型指定所有选项 - 所以目前只为 Chrome 完全开发, IE和FF
enjoy::
请享用::
// Start of code //////////////////////////////////////////////
// Source http://stackoverflow.com/questions/6660649/mobile-or-desktop-browser-detection-and-redirect-to-respective-web-page
// Updated Added 14 0220
// need to identify different browsers so as to display correct Window/Div sizing!
$USER_AGENT = explode('/', $_SERVER ['HTTP_USER_AGENT']);
// print_r ($USER_AGENT);
/* Eliminate IE */
if (strpos($USER_AGENT[1], 'MSIE') !== false ){
// echo "Browser ::\t TEST";
}
$browserDetect = explode (" ",$USER_AGENT[2]);
//print_r ($browserDetect);
// Need to swop around the Keys so that the Browser is the first key in the array - makes things easier with detecting
$browserDetect = array_reverse ($browserDetect);
//print_r ($browserDetect);
/* Redirection */
switch ($browserDetect[0]) {
case 'Mozilla' :
echo "Browser ::\t Mozilla";
break;
case 'Chrome' :
echo "\nBrowser ::\t Chrome";
// build =
$browserBuild = explode (" ",$USER_AGENT[3]);
echo "\nBuild ::\t ".$browserBuild[0];
break;
case 'Firefox' :
echo "Browser ::\t Firefox";
// build =
echo "\nBuild ::\t ".$USER_AGENT[3];
break;
case 'Gecko' :
echo "Browser ::\t IE";
// build =
$browserBuild = explode (" ",$USER_AGENT[2]);
echo "\nBuild ::\t ".$browserBuild[2];
break;
case 'Opera' :
echo "Browser ::\t Opera";
break;
case 'Googlebot' :
echo "Browser ::\t Googlebot";
break;
case 'msnbot' :
echo "Browser ::\t msnbot";
break;
case 'Safari' :
echo "Browser ::\t Safari";
break;
default :
echo "Browser ::\t Unsure what browser your using?";
break;
};
// Added 14 0220 /// Source:: http://en.kioskea.net/faq/1251-php-detect-the-display-resolution
// Needed to set the Viewer Screen for FF and IE
if(!isset($_GET['r']))
{
echo "<script language=\"JavaScript\">
<!--
document.location=\"$PHP_SELF?r=1&width=\"+screen.width+\"&Height=\"+screen.height;
//-->
</script>";
}
else {
// Code to be displayed if resolutoin is detected
if(isset($_GET['width']) && isset($_GET['Height'])) {
echo "\nScreen size ::\t ".$_GET['width']."x".$_GET['Height'];
}
else {
// Resolution not detected
}
}
// End of code snippet /////////////////////////////////////////////////////////////////////////////