2016-04-26 3 views
16

Я пишу Угловое 2 приложение, но сознают, что некоторые пользователи не могут использовать браузер, который может поддерживать угловую 2.Угловые 2: Проверьте, правильно ли браузер пользователя совместит

У меня есть чек ли Javascript является Я больше заинтересован в том, не поддерживает ли браузер пользователя некоторые JS/HTML5/другие функции, требуемые Angular 2.

Что было бы лучшим способом оценить, поддерживает ли браузер пользователя Angular 2 и отображает сообщение, если нет?

Я знаю, например, Modernizer, но не знаете, с чего начать, поскольку фокус Модернизатора, по-видимому, заключается в сборке проверок совместимости, а не в предоставлении решения, которое проверяет совместимость целых фреймворков.

ответ

18

Угловой 2 и отображение сообщения, если нет?

Возможно, версия браузеров, поддерживающих угловую поддержку, может быть не версией браузеров, которую работает ваше приложение (это может быть больше или может быть меньше).

Вы должны сделать индивидуальные проверки браузеров самостоятельно. например Обнаружение IE: http://codepen.io/gapcode/pen/vEJNZN

/** 
* detect IE 
* returns version of IE or false, if browser is not Internet Explorer 
*/ 
function detectIE() { 
    var ua = window.navigator.userAgent; 

    // Test values; Uncomment to check result … 

    // IE 10 
    // ua = 'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Trident/6.0)'; 

    // IE 11 
    // ua = 'Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv:11.0) like Gecko'; 

    // IE 12/Spartan 
    // ua = 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.71 Safari/537.36 Edge/12.0'; 

    // Edge (IE 12+) 
    // ua = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2486.0 Safari/537.36 Edge/13.10586'; 

    var msie = ua.indexOf('MSIE '); 
    if (msie > 0) { 
    // IE 10 or older => return version number 
    return parseInt(ua.substring(msie + 5, ua.indexOf('.', msie)), 10); 
    } 

    var trident = ua.indexOf('Trident/'); 
    if (trident > 0) { 
    // IE 11 => return version number 
    var rv = ua.indexOf('rv:'); 
    return parseInt(ua.substring(rv + 3, ua.indexOf('.', rv)), 10); 
    } 

    var edge = ua.indexOf('Edge/'); 
    if (edge > 0) { 
    // Edge (IE 12+) => return version number 
    return parseInt(ua.substring(edge + 5, ua.indexOf('.', edge)), 10); 
    } 

    // other browser 
    return false; 
} 
+1

Спасибо за ваш ответ. Я считаю, что работа более или менее поддерживается и трудно предсказать. Я теперь добавляю проверки браузера как метод первого прохода, используя [Bowser] (https://github.com/ded/bowser). Я все еще заинтересован в том, есть ли какой-либо окончательный ответ на этот вопрос. – Harry

3

Не все браузеры полностью поддерживают ES6 (ES2015) стандарт еще.

https://kangax.github.io/compat-table/es6/

Если вы хотите использовать функции ES6 языка для углового 2 приложения, то вы должны включить ES6 подкладку, чтобы привести свой браузер до-до-спецификации:

https://cdnjs.cloudflare.com/ajax/libs/es6-shim/0.35.0/es6-shim.min.js

Это существо сказал, что IE является исключением. Есть дополнительный polyfills, что вам нужно включить для поддержки IE:

https://npmcdn.com/angular2/es6/dev/src/testing/shims_for_IE.js

Если вы хотите целевую ES5 (старого стандарт), вы должны убедиться, что вы пишете угловое приложение с помощью ES5 языка только функции. В общем, есть больше поддержки браузера для функций ES5, но она не совершенна:

http://kangax.github.io/compat-table/es5/

Конечно, есть прокладка для этого тоже:

https://cdnjs.cloudflare.com/ajax/libs/es5-shim/4.5.8/es5-shim.min.js

+1

Спасибо за ваш ответ. В соответствии с настройкой ускоренного запуска Angular 2, я уже использую прокладки ES6 и IE, в дополнение к полигонам Angular 2 и SystemJS, но я не знал о прокладке ES5. Тем не менее, я в меньшей степени обеспокоен (на данный момент) поддержкой более старых стандартов, так как обнаруживает несовместимые браузеры и говорит пользователю, чтобы убедиться, что их не путают, если/когда что-то не работает. – Harry