2013-11-20 93 views
-1

我想重定向用户到某些页面,具体取决于他们使用的浏览器,特别是如果IE浏览器,然后转到此页面,否则任何其他浏览器本页..我有一个JavaScript函数工作正常,但IE10/IE11出来后,它不再有效。使用其他代码结合起来,我想出了这个: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"); } 
} 

但它不工作。任何帮助表示赞赏。谢谢!

正确的代码感谢尖尖的帮助:

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"); } 
+0

请格式化您的代码,谢谢。 – iConnor

+4

为什么要重定向IE10和IE11的用户?你试图解决什么问题? – Pointy

+0

如果他们使用ANY IE浏览器,则转到某个页面。任何其他浏览器的另一页..谢谢! – user2665375

回答

2

你这里的逻辑(重新格式化):

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,不过,你会碰到,微软已经刻意问题从useragent字符串中取出“MSIE”。为了解决这个问题,我想你可以改变正则表达式,使它匹配“Trident”字符串。 See this MSDN resource for more details.

+0

明白了。我使用了不同人的代码。我现在看到你的说法,我有一个嵌套的if语句,这意味着什么都没有。所以我可以改正它,它应该工作?其他代码看起来正确吗?谢谢你的帮助! – user2665375

+0

不客气@ user2665375!并且请注意仔细的代码缩进是有帮助的,因为它使得这种情况更容易发现。 – Pointy

+1

修改为:if(browser ==“msie”){ \t location.replace(“mobile_demo.php”); } else { \t location.replace(“full_demo.php”); }并似乎到目前为止工作与IE11 .. :) – user2665375

1

我已经开始使用特征检测来确定它是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 

} 
+0

如果您使用的是特定功能,则功能检测功能可以正常工作,但如果浏览器更改功能实施,则不再适用于检测浏览器。 – theUtherSide