2013-11-20 4 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

Если они используют ЛЮБОЙ браузер IE, перейдите на определенную страницу. Любой другой браузер другой страницы .. Спасибо! – user2665375

ответ

2

Ваша логика здесь (reformated):

if ((browser=="msie") && (version>=4)) { 
    if (browser=="opera"||"chrome"||"safari"||"firefox") { 
    location.replace("mobile_demo.php"); 
    } 
    else { 
    location.replace("full_demo.php"); 
    } 
} 

средства

Если браузер "MSIE" и версия 4 или более, тогда, если браузер «опера», «хром», «сафари» или «firefox» перейдут на мобильную демонстрацию, но если это не один из этих четырех, перейдите к полной демонстрации.

Итак, вы проверяете, является ли браузер «msie», а затем проверьте, является ли он одним из этих четырех браузеров. Когда это будет? Никогда, потому что мы делаем только этот тест, когда браузер уже известен как «msie». Он не может быть «msie» и одним из других одновременно, поэтому код всегда загружает полную демоверсию, если только браузер не «msie», и в этом случае он вообще ничего не делает или то, что вы не публиковали.

редактировать — если все, что вам нужно сделать, это определить, является ли браузер IE или нет:

if (browser == "msie") 
    location.replace("full_demo.php"); 
else 
    location.replace("mobile_demo.php"); 

Для IE11, однако, вы собираетесь столкнуться с проблемой, что Microsoft имеет намеренно взял «MSIE» из строки useragent. Чтобы справиться с этим, вы можете изменить регулярное выражение так, чтобы оно соответствовало строке «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

Смежные вопросы