我正在尝试将用户重定向到某些页面,具体取决于他们使用的浏览器,特别是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"); }
答案 0 :(得分: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.
答案 1 :(得分: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
}