Próbuję dowiedzieć się, dlaczego moja aplikacja kątowa 2 utknęła na wyświetlaniu Ładowanie ... podczas pracy w przeglądarce IE 11.
Idąc za czyjąś sugestią, wypróbowałem ten plunker, opublikowany przez kogoś w przypadku przepełnienia stosu, zarówno na Chrome, jak i IE 11. Działa dobrze na Chrome, ale nie działa na IE 11. Ten sam błąd, utknąłem na komunikacie „Ładowanie ...”
Plunker to: https://plnkr.co/edit/6zVFbrH5yohwc714gBbk?p=preview
<!DOCTYPE html>
<html>
<head>
<script>document.write('<base href="' + document.location + '" />');</script>
<title>Router Sample</title>
<link rel="stylesheet" href="style.css">
<script src="https://cdnjs.cloudflare.com/ajax/libs/es6-shim/0.34.2/es6-shim.min.js"></script>
<script src="https://code.angularjs.org/2.0.0-beta.1/angular2-polyfills.js"></script>
<script src="https://code.angularjs.org/tools/system.js"></script>
<script src="https://code.angularjs.org/tools/typescript.js"></script>
<script src="https://code.angularjs.org/2.0.0-beta.1/Rx.js"></script>
<script src="https://code.angularjs.org/2.0.0-beta.1/angular2.dev.js"></script>
<script src="https://code.angularjs.org/2.0.0-beta.1/http.dev.js"></script>
<script>
System.config({
transpiler: 'typescript',
typescriptOptions: { emitDecoratorMetadata: true },
packages: {'src': {defaultExtension: 'ts'}}
});
System.import('src/boot')
.then(null, console.error.bind(console));
</script>
</head>
<body>
<my-app>loading...</my-app>
</body>
</html>
Czy ktoś ma pomysł, dlaczego IE 11 nie uruchamia aplikacji angular 2?
Dziękuję Ci!
angular
typescript
internet-explorer
Pat Bone Crusher Laplante
źródło
źródło
Odpowiedzi:
Najnowsza wersja
angular
jest domyślnie skonfigurowana tylko dla wiecznie zielonych przeglądarek ...Więcej informacji na temat obsługi przeglądarek wraz z listą sugerowanych wypełnień dla określonych przeglądarek można znaleźć tutaj. https://angular.io/guide/browser-support#polyfill-libs
Oznacza to, że musisz ręcznie włączyć prawidłowe wypełnienia, aby Angular działał w IE11 i poniżej.
Aby to osiągnąć, przejdź do
polyfills.ts
(src
domyślnie w folderze) i po prostu odkomentuj następujące importy:Zwróć uwagę, że komentarz znajduje się dosłownie w pliku, więc łatwo go znaleźć.
Jeśli nadal masz problemy, możesz obniżyć wersję usługi
target
does5
intsconfig.json
zgodnie z@MikeDub
sugestią. To powoduje zmianę danych wyjściowych kompilacji wszelkiches6
definicji naes5
definicje. Na przykład grube funkcje strzałkowe (()=>{}
) zostaną skompilowane do anonimowych funkcji (function(){}
). Listę przeglądarek obsługiwanych przez es6 można znaleźć tutaj .Uwagi
• W komentarzach
@jackOfAll
zapytano mnie, czy polifill IE11 są ładowane, nawet jeśli użytkownik jest w wiecznie zielonej przeglądarce, która ich nie potrzebuje. Odpowiedź brzmi: tak! Włączenie IE11 polyfills odbędzie plik PolyFill od~162KB
do~258KB
dniem 8 sierpnia '17. Zainwestowałem w próbę rozwiązania tego problemu, jednak w tej chwili nie wydaje się to możliwe.• Jeśli otrzymujesz błędy w IE10 i poniżej, przejdź do ciebie
package.json
i downgradewebpack-dev-server
do2.7.1
specjalnie. Wyższe wersje nie obsługują już „starszych” wersji IE.źródło
Miałem dokładnie ten sam problem i żadne z rozwiązań nie zadziałało. Zamiast tego dodano następującą linię w (stronie głównej) .html pod
<head>
poprawioną.źródło
Dziś napotkałem ten problem. Znalazłem rozwiązanie na GitHubie, które nie wymaga przechodzenia do późniejszej wersji beta.
Dodaj następujący skrypt do swojego HTML:
To rozwiązało problem. Aby uzyskać więcej informacji, możesz śledzić problem z github tutaj: https://github.com/angular/angular/issues/7144
źródło
Stan na luty 2017 r
Korzystając z projektu Angular-Cli , wszystkie linie w
polyfills.ts
pliku były już odkomentowane, więc wszystkie wypełnienia były już używane.Znalazłem to rozwiązanie tutaj, aby naprawić mój problem.
Podsumowując powyższy link, IE nie obsługuje funkcji strzałek lambda / grubych strzałek, które są cechą es6 . ( To jest, jeśli polyfills.ts nie działa dla Ciebie ).
Rozwiązanie : musisz wybrać es5 , aby działał w dowolnej wersji IE, wsparcie dla tego zostało wprowadzone tylko w nowej przeglądarce Edge przez Microsoft.
Znajduje się w
src/tsconfig.json
:źródło
.ts
pliki z używania grubej strzałki na anon funcs. Myślę, że powinieneś wyciąć cytat z tego linku na temat tego, jak różnią się dane wyjściowe kompilatora, jeśli zmienisz cel skryptu ecma, który odtąd łagodzi problem.źródło
Dla mnie z iexplorer 11 i Angular 2 naprawiłem wszystkie powyższe problemy, wykonując 2 rzeczy:
w index.html dodaj:
w odkomentowaniu src \ polyfills.ts :
źródło
ERROR Error: Uncaught (in promise): TypeError: Object doesn't support property or method 'setPrototypeOf' at EmptyError (http://localhost:4200/vendor.js:102653:9)
Zainstaluj pakiety npm Zauważ, że w komentarzach znajduje się kilka poleceń instalacji npm. Jeśli używasz wczesnej wersji Angular CLI, może istnieć również trzecia. W przypadku wersji Angular CLI 7, 6 i 1.7 należy uruchomić:
npm install --save classlist.js
npm install --save web-animations-js
teraz otwórz IE, wyrenderuj aplikację i sprawdź :)
źródło
Od września 2017 r. (Wersja węzła = v6.11.3, npm wersja = 3.10.10), tak mi się udało (dzięki @Zze):
Edytować
polyfills.ts
i usuń komentarz z importu, który jest niezbędny dla IE11.Dokładniej, edytuj
polyfills.ts
(src
domyślnie znajduje się w folderze) i po prostu odkomentuj wszystkie wiersze wymagane dla IE11 (komentarze w pliku wyjaśniają dokładnie, jakie importy są niezbędne do uruchomienia w IE11).Małe ostrzeżenie: zwróć uwagę podczas usuwania komentarzy w wierszach
classlist.js
iweb-animations-js
. Każda z tych skomentowanych linii ma określony komentarz: musisz uruchomić skojarzone z nimi polecenia npm przed ich odkomentowaniem, w przeciwnym razie przetwarzanie polyfills.ts zepsuje się.Krótko mówiąc, polyfills to fragmenty kodu, które implementują funkcję przeglądarki internetowej, która jej nie obsługuje. Dlatego w domyślnej konfiguracji polyfills.ts aktywny jest tylko minimalny zestaw importów (ponieważ jest przeznaczony dla tak zwanych „wiecznie zielonych” przeglądarek; ostatnie wersje przeglądarek, które aktualizują się automatycznie ).
źródło
EDYCJA 2018/05/15 : Można to osiągnąć za pomocą metatagu ; dodaj ten tag do swojego index.html i zignoruj ten post.
To nie jest pełna odpowiedź na pytanie (na odpowiedź technicznego należy zapoznać się @ odpowiedź ZZE za wyżej ), ale jest ważnym krokiem, który potrzebuje do dodania:
TRYB ZGODNOŚCI
Nawet po zastosowaniu odpowiednich wypełniaczy nadal występują problemy z uruchamianiem aplikacji Angular 2+ przy użyciu wypełniaczy w IE11. Jeśli uruchamiasz witrynę poza hostem intranetowym (tj. Jeśli testujesz ją pod adresem http: // localhost lub inna zmapowana nazwa domeny lokalnej), musisz przejść do ustawień widoku zgodności i odznaczyć opcję „Wyświetlaj witryny intranetowe w widoku zgodności”, ponieważ widok zgodności IE11 łamie kilka konwencji zawartych w wypełniaczach ES5 dla Angular.
źródło
Mam aplikację Angular4, nawet jak dla mnie też nie działała w przeglądarce IE11, zrobiłem poniższe zmiany, teraz działa poprawnie. Po prostu dodaj poniższy kod w pliku index.html
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
Wystarczy odkomentować poniższe wiersze z pliku polyfills.ts
Te 2 powyższe kroki rozwiążą Twój problem, daj mi znać, jeśli coś tam będzie. Dzięki!!!
źródło
Jeśli nadal masz problemy, że nie wszystkie funkcje JavaScript działają, dodaj tę linię do swoich polyfillów. Naprawia brakującą metodę „wartości”:
Ta linia naprawia brakującą metodę „zawiera”:
źródło
Miałem ten sam problem, jeśli włączyłeś Wyświetlanie witryn intranetowych w widoku zgodności, polyfills.ts nie będzie działać, nadal musisz dodać następujący wiersz, jak powiedziano.
źródło
wymiana pieniędzy
tsconfig.json
rozwiązał mój problem
źródło
Udało mi się wykonać następujące kroki, aby poprawić wydajność mojej aplikacji w IE 11 1.) W pliku Index.html dodaj następujące CDN
2.) W pliku polyfills.ts i dodaj następujący import:
źródło
źródło
Jeśli żadne inne rozwiązanie nie zadziała, warto zbadać źródło problemu. Może być tak, że moduł npm bezpośrednio wstawia kod ES6, którego nie można przetransponować.
W moim przypadku miałem
SCRIPT1002: błąd składni vendor.js (114536,27) w następującym wierszu:
Przeszukałem folder node_modules i znalazłem, z którego pliku pochodzi linia. Okazało się, że winowajcą był punycode.js który w swojej wersji 2.1.0 korzysta bezpośrednio z ES6.
Po zdegradowaniu do wersji 1.4.1, która używa ES5, problem został rozwiązany.
źródło
Jak rozwiązać ten problem w Angular8
polyfills.ts odkomentuj,
import 'classlist.js';
aimport 'web-animations-js';
następnie zainstaluj dwie zależności, używającnpm install --save classlist.js
inpm install --save web-animations-js
.zaktualizuj za
tsconfig.json
pomocą"target":"es5",
następnie
ng serve
uruchom aplikację i otwórz w IE, będzie działaćźródło
Odkomentuj sekcję IE w src / polyfill.js,
/ ** IE10 i IE11 wymagają następujących elementów obsługi NgClass na elementach SVG * /
import 'classlist.js';
Jeśli jakikolwiek błąd kompilacji dla brakującego pakietu,
npm install classlist.js --save-exact
Pamiętaj, aby dołączyć poniższą linię, aby ustawić domyślny tryb dokumentu IE. W przeciwnym razie otworzy się w wersji 7
źródło
Wypróbowałem każde rozwiązanie w tym wątku, a także kilka innych, bez powodzenia. Ostatecznie naprawiłem to dla mnie, aby zaktualizować każdy pakiet w moim projekcie, w tym DUŻE zmiany wersji. Więc:
Otóż to. Chciałbym móc wskazać, która biblioteka jest winowajcą. Rzeczywisty błąd, który otrzymywałem, to „Błąd składni” w vendor.js w Angular 6.
źródło
Angular 9 po wyjęciu z pudełka powinien teraz działać absolutnie dobrze w IE11.
Wypróbowałem wszystkie wymienione tutaj sugestie i żadna z nich nie zadziałała. Jednak udało mi się wyśledzić to do konkretnej biblioteki, w której importowałem
app.module
(ZXingScannerModule
a dokładnie). Jeśli Twoja aplikacja nie działa w IE11 na pierwszej stronie, spróbuj usunąć biblioteki pojedynczo i sprawdź w IE11 - został całkowicie pominięty we wszystkich moich błędach ostrzegawczych kompilacji. Jeśli okaże się, że tak jest, rozważ podzielenie obszaru witryny, który używa tej biblioteki jako leniwego ładowania modułu.źródło