我正试图根据用户使用的浏览器将用户重定向到某些页面,特别是如果是IE,则转到该页面,否则转到该页面的任何其他浏览器。。我有一个JavaScript函数运行良好,但在IE10/IE11问世后,它就不再工作了。结合使用其他代码,我想出了这个:
function get_browser()
{
var N=navigator.appName, ua=navigator.userAgent, tem;
var M=ua.match(/(opera|chrome|safari|firefox|msie)/?s*(.?d+(.d+)*)/i);
if(M && (tem= ua.match(/version/([.d]+)/i))!= null) M[2]= tem[1];
M=M? [M[1], M[2]]: [N, navigator.appVersion, '-?'];
return M[0];
}
function get_browser_version()
{
var N=navigator.appName, ua=navigator.userAgent, tem;
var M=ua.match(/(opera|chrome|safari|firefox|msie)/?s*(.?d+(.d+)*)/i);
if(M && (tem= ua.match(/version/([.d]+)/i))!= null) M[2]= tem[1];
M=M? [M[1], M[2]]: [N, navigator.appVersion, '-?'];
return M[1];
}
var browser=get_browser();
var browser_version=get_browser_version();
if ((browser=="msie")
&& (version>=4))
{
if(browser=="opera"||"chrome"||"safari"||"firefox") {
location.replace("mobile_demo.php"); }
else { location.replace("full_demo.php"); }
}
然而,它不起作用。感谢您的帮助。谢谢
由于Pointy的帮助,正确的代码:
function get_browser()
{
var N=navigator.appName, ua=navigator.userAgent, tem;
var M=ua.match(/(opera|chrome|safari|firefox|msie|trident)/?s*(.?d+(.d+)*)/i);
if(M && (tem= ua.match(/version/([.d]+)/i))!= null) M[2]= tem[1];
M=M? [M[1], M[2]]: [N, navigator.appVersion, '-?'];
return M[0];
}
//Optional to get browser version, not needed in this case
function get_browser_version()
{
var N=navigator.appName, ua=navigator.userAgent, tem;
var M=ua.match(/(opera|chrome|safari|firefox|msie|trident)/?s*(.?d+(.d+)*)/i);
if(M && (tem= ua.match(/version/([.d]+)/i))!= null) M[2]= tem[1];
M=M? [M[1], M[2]]: [N, navigator.appVersion, '-?'];
return M[1];
}
var browser=get_browser();
var browser_version=get_browser_version();
if (browser=="MSIE"||browser=="Trident"){
location.replace("full_demo.php"); }
else {
location.replace("mobile_demo.php"); }
此处的逻辑(重新格式化):
if ((browser=="msie") && (version>=4)) {
if (browser=="opera"||"chrome"||"safari"||"firefox") {
location.replace("mobile_demo.php");
}
else {
location.replace("full_demo.php");
}
}
指
如果浏览器是"msie",版本是4或更高版本,那么如果浏览器是"opera"、"chrome"、"safari"或"firefox",则转到移动演示,但如果不是这四种浏览器之一,则转到完整演示。
因此,您检查浏览器是否为"msie",然后检查它是否是其他四个浏览器中的一个。什么时候?从来没有,因为我们只在已知浏览器为"msie"时进行测试。它不能同时是"msie"和另一个,所以代码总是加载完整的演示,除非浏览器不是"msie",在这种情况下,它要么什么都不做,要么是你没有发布的东西。
编辑—如果你需要做的只是确定浏览器是否是IE:
if (browser == "msie")
location.replace("full_demo.php");
else
location.replace("mobile_demo.php");
然而,对于IE11,您将遇到这样的问题:Microsoft故意从useragent字符串中删除"MSIE"。为了解决这个问题,我想您可以更改正则表达式,使其与"三叉戟"字符串匹配。有关详细信息,请参阅此MSDN资源。
我已经开始使用特征检测来确定它是IE11还是IE10。他们处理指针事件的方式和我利用它的方式不同
if (window.navigator.msPointerEnabled && !window.PointerEvent){
// Using feature detection we can diff between IE 11 and IE 10.
// Pointer events were added in IE10 (window.PointerEvent).
// The syntax changed in IE 11 (vendor prefix was removed).
// If pointer events are supported - and - the new syntax is supported, we know it is IE 11.
// If pointer events supported and the new syntax is not supported -- then we know it is IE 10.
// do something for IE10 here
} else {
// do something for IE11 here
}