Javascript OS检测-空变量
我试图实现的是触发基于用户操作系统的自动文件下载。通过下面的代码,我得到了空字符串(而文件应该有url)和页面刷新循环 e、 g 有人能告诉我我做错了什么吗 操作系统检测:Javascript OS检测-空变量,javascript,php,Javascript,Php,我试图实现的是触发基于用户操作系统的自动文件下载。通过下面的代码,我得到了空字符串(而文件应该有url)和页面刷新循环 e、 g 有人能告诉我我做错了什么吗 操作系统检测: <?php $user_agent = $_SERVER['HTTP_USER_AGENT']; function getOS() { global $user_agent; $os_platform = "Unknown OS Platform"; $os_array =
<?php
$user_agent = $_SERVER['HTTP_USER_AGENT'];
function getOS() {
global $user_agent;
$os_platform = "Unknown OS Platform";
$os_array = array(
'/windows nt 10/i' => 'Windows 10',
'/windows nt 6.3/i' => 'Windows 8.1',
'/windows nt 6.2/i' => 'Windows 8',
'/windows nt 6.1/i' => 'Windows 7',
'/windows nt 6.0/i' => 'Windows Vista',
'/windows nt 5.2/i' => 'Windows Server 2003/XP x64',
'/windows nt 5.1/i' => 'Windows XP',
'/windows xp/i' => 'Windows XP',
'/windows nt 5.0/i' => 'Windows 2000',
'/windows me/i' => 'Windows ME',
'/win98/i' => 'Windows 98',
'/win95/i' => 'Windows 95',
'/win16/i' => 'Windows 3.11',
'/macintosh|mac os x/i' => 'Mac OS X',
'/mac_powerpc/i' => 'Mac OS 9',
'/linux/i' => 'Linux',
'/ubuntu/i' => 'Ubuntu',
'/iphone/i' => 'iPhone',
'/ipod/i' => 'iPod',
'/ipad/i' => 'iPad',
);
foreach ($os_array as $regex => $value)
if (preg_match($regex, $user_agent))
$os_platform = $value;
return $os_platform;
}
if( substr(getOS(), 0, 6) === 'Windows' ){
$file = 'https://path-to-file.exe';
}
else if( substr(getOS(), 0, 2) === 'Mac' ){
$file = 'https://path-to-file.dmg';
}
else if( substr(getOS(), 0, 4) === 'Linux' ){
$file = 'https://path.air';
}
else{
}
?>
自动下载触发器:
var downloadTimeout = setTimeout(function () {
window.location = '<?php echo $file; ?>';
}, 500);
var downloadTimeout=setTimeout(函数(){
window.location='';
}, 500);
我找到了一个适合我的小方法。没什么特别的,只是个想法
getOS()运行良好,与我的操作系统相呼应;基于$os_数组中的选项,因此我将链接放在了我的文件上,而不是放在了os名称上,并使用了getOS而不是$file变量。丑陋,但至少可以工作那么,
$file
在哪里初始化并返回?你的.php
决定了操作系统,但是没有向客户端发送URL来重新定位。我认为你的浏览器嗅探解决方案非常好。虽然所有这些if-else语句都可以简化为一个很好的switch-statement.OT,但是:为什么要经历这么多麻烦,只给我一个我可能根本不想要的文件呢?我可能只是来下载一个系统的文件,使用另一个。。。在一个简单的链接列表和适当的描述会做得更好的情况下,你会使事情变得过于复杂,并从本质上降低用户体验。可能建议或突出显示最可能需要的文件,但保留其他选项,所有选项由用户选择。@CBroe据我们所知,用户在单击“将我带到操作系统的相应下载页”的链接后到达此页面.@Barmar听起来像我刚开始说的。这个答案真的很难理解。演示如何重写代码以解决问题。
var downloadTimeout = setTimeout(function () {
window.location = '<?php echo $file; ?>';
}, 500);