2016-04-26 29 views
16

Piszę kątowym 2 app, ale jestem świadomy, że niektórzy użytkownicy nie mogą używać przeglądarki, która może obsługiwać kątowa 2.kątowa 2: Sprawdź, czy przeglądarka użytkownika jest kompatybilny

Mam czek czy Javascript jest włączone, jestem bardziej zainteresowany tym, czy przeglądarka użytkownika nie obsługuje niektórych JS/HTML5/innych funkcji wymaganych przez Angular 2.

Jaki byłby najlepszy sposób oceny, czy przeglądarka użytkownika obsługuje Angular 2 i wyświetla wiadomość, jeśli nie?

Jestem świadomy np. Modernizer, ale nie wiadomo, od czego zacząć, ponieważ koncentruje się modernizator, wydaje się raczej polegać na scalaniu sprawdzania kompatybilności, zamiast dostarczania rozwiązania sprawdzającego kompatybilność całych frameworków.

Odpowiedz

18

Kątowy 2 i wyświetla komunikat, jeśli nie?

Oficjalna wersja przeglądarek obsługiwanych kątowo może nie być wersją przeglądarek, które obsługuje twoja aplikacja (może być więcej lub może być mniejsza).

Musisz samodzielnie sprawdzać przeglądarkę. na przykład Wykryć 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

Dziękuję za odpowiedź. Rozumiem, że działania są mniej lub bardziej wspierane i trudne do przewidzenia. Dodaję teraz przeglądarkę jako metodę pierwszego przejścia, używając [Bowser] (https://github.com/ded/bowser). Wciąż jednak zależy mi na tym, czy jest jakaś ostateczna odpowiedź na to pytanie. – Harry

3

Nie wszystkie przeglądarki obsługują jeszcze całkowicie ES6 (ES2015) norma.

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

Jeśli chcesz korzystać z funkcji językowych ES6 dla Kątowymi 2 app następnie należy uwzględnić podkładkę ES6 przynieść przeglądarkę up-to-spec:

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

że bycie powiedział, IE wydaje się być wyjątkiem. Istnieją dodatkowe polyfills że trzeba to wspierać IE:

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

Jeśli chcesz kierować ES5 (starszy standard), należy się upewnić, że piszesz kątową aplikację przy użyciu języka ES5 funkcje tylko. Ogólnie rzecz biorąc, istnieje większe wsparcie przeglądarki dla funkcji ES5, ale to nie jest idealne:

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

Oczywiście, jest to podkładka na to zbyt:

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

+1

Dzięki za odpowiedź. Zgodnie z ustawieniem szybkiego uruchamiania Angular 2 używam już podkładek ES6 i IE, oprócz polifoli Angular 2 i SystemJS, ale nie wiedziałem o podkładce ES5. Jednak mniej mnie teraz (w tym momencie) chodzi o wspieranie starszych standardów tak bardzo, jak wykrywanie niekompatybilnych przeglądarek i informowanie użytkownika, aby upewnić się, że nie zostaną pomyleni, jeśli/kiedy rzeczy nie będą działać. – Harry