2012-05-04 2 views
2

На нашей странице индекса у нас есть скрипт для перенаправления пользователей, которые находятся на смартфонах (iPhone, Android & Windows Phone) на наш мобильный сайт. Техника мы используем:IE9 ошибочно перенаправляет на мобильный сайт

if (navigator.userAgent.match(/iPhone/) && ! navigator.userAgent.match(/iPad/)) { 
     window.location="mobile.html"; 
     } 
    else if (navigator.userAgent.match(/Android/) && ! navigator.userAgent.match(/Android 3/)) { 
     window.location="mobile.html"; 
     } 
    else if (navigator.userAgent.match(/Windows Phone/) || navigator.userAgent.match(/Zune/)) { 
     window.location="mobile.html"; 
     } 

Все работало отлично, пока мы не проверили это на IE9, который по какой-то причине перенаправляет на мобильный сайт, даже если его UserAgent не содержит какой-либо из приведенных выше строк. UserAgent для IE9 является:

Mozilla/5.0 (совместимый; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)

IE8 не ведет себя так и не делает любой другой платформы. Является ли сценарий неправильным или IE снова ударил с его мстительным douchebaggery? Благодарю.

+0

Если вы отлаживая код, вы можете увидеть, в какой из них он попадает? – Adam

+0

@ RMX - Я согласен с Адамом. Попробуйте выпустить 'console.log (navigator.userAgent);' в каждой структуре управления, чтобы определить, какое условие сопоставляется, и точно, что сообщает userAgent. – jaredhoyt

ответ

2

Согласно этому post regarding IE9 User Agents, IE9 изменяет свой Пользовательский агент в режиме совместимости и может содержать строку «Zune». Похоже, нам придется попробовать и использовать другую строку для перенаправления пользователей Windows Phone. Благодарю.

+0

Вам не нужно. Просто убедитесь, что вы указали правильный doctype, и IE9 не перейдет в режим совместимости. –

1

Когда вы используете метод .match(), он возвращает массив, который может быть пустым ([]) или нет.
ИЭ probrably, учитывая, что [] является true выражение, поэтому я предлагаю вам сделать следующее:

if(/iPhone/.test(navigator.userAgent) && !/iPad/.test(navigator.userAgent)){ 
    window.location="mobile.html"; 
}else if(/Android/.test(navigator.userAgent) && !/Android 3/.test(navigator.userAgent){ 
    window.location="mobile.html"; 
}else if(/Windows Phone/.test(navigator.userAgent) || /Zune/.test(navigator.userAgent)){ 
    window.location="mobile.html"; 
} 

Я предполагаю, что это сработает, потому что .test() метод будет возвращать только true или false

+0

IE9 по-прежнему перенаправляет на мобильный сайт свой сценарий. Мы удалили последнюю строку скрипта (один из «Windows Phone» и «Zune»), и теперь IE9 не перенаправляет. Также убедитесь, что userAgent в IE9 Developers Tools был выбран по умолчанию и не изменился ни на что другое. – RMX

0

Спасибо за ваш ответ и помощь. Далее работал для меня с помощью телефона Windows 8

if(/iPhone/.test(navigator.userAgent) && !/iPad/.test(navigator.userAgent)){ 
    window.location="/mobile"; 
}else if(/Android/.test(navigator.userAgent) && !/Android 3/.test(navigator.userAgent){ 
    window.location="/mobile"; 
}else if(/Windows Phone/.test(navigator.userAgent) || /Zune/.test(navigator.userAgent)){ 
    window.location="/mobile"; 
} 

Я изменил window.location = «mobile.html» для текущего каталога я создал для файла index.html Подвижная в

ex. /root directory/mobile 
Смежные вопросы