Estoy tratando de averiguar por qué mi aplicación angular 2 está atascada al mostrar Cargando ... cuando se ejecuta en IE 11.
Siguiendo la sugerencia de alguien, probé este plunker, publicado por alguien en el desbordamiento de pila, tanto en Chrome como en IE 11. Funciona bien en Chrome, pero falla en IE 11. El mismo error, pegado al decir "Cargando ..."
El plunker es: 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>
¿Alguien tiene alguna idea de por qué IE 11 no puede ejecutar la aplicación angular 2?
¡Gracias!
angular
typescript
internet-explorer
Pat Bone Crusher Laplante
fuente
fuente
Respuestas:
La última versión de
angular
solo está configurada para navegadores de hoja perenne de forma predeterminada ...Consulte aquí para obtener más información sobre el soporte del navegador junto con una lista de polyfills sugeridos para navegadores específicos. https://angular.io/guide/browser-support#polyfill-libs
Esto significa que debe habilitar manualmente los polyfills correctos para que Angular funcione en IE11 y versiones posteriores.
Para lograr esto, vaya a
polyfills.ts
(en lasrc
carpeta por defecto) y simplemente elimine el comentario de las siguientes importaciones:Tenga en cuenta que el comentario está literalmente en el archivo, por lo que es fácil de encontrar.
Si todavía tiene problemas, puede rebajar la
target
propiedad paraes5
entsconfig.json
lo@MikeDub
sugerido. Lo que esto hace es cambiar el resultado de la compilación de lases6
definiciones aes5
definiciones. Por ejemplo, las funciones de flecha gruesa (()=>{}
) se compilarán en funciones anónimas (function(){}
). Puede encontrar una lista de navegadores compatibles con es6 aquí .Notas
• En los comentarios me preguntaron
@jackOfAll
si los polyfills IE11 están cargados incluso si el usuario está en un navegador de hoja perenne que no los necesita. La respuesta es sí, lo son. La inclusión de los polyfills de IE11 llevará su archivo de polyfill~162KB
a~258KB
partir del 8 de agosto de 2017. He invertido en tratar de resolver esto, sin embargo, no parece posible en este momento.• Si se producen errores en IE10 y por debajo, entra en usted
package.json
y la rebajawebpack-dev-server
de2.7.1
manera específica. Las versiones superiores a esta ya no admiten versiones "anteriores" de IE.fuente
Tuve exactamente el mismo problema y ninguna de las soluciones funcionó para mí. En su lugar, agregue la siguiente línea en (homepage) .html debajo de
<head>
arreglado.fuente
Me encontré con este problema hoy. Encontré una solución en GitHub que no requiere ir a una versión posterior de la beta.
Agregue el siguiente script a su html:
Esto resolvió el problema para mí. Para obtener más detalles, puede seguir el problema de github aquí: https://github.com/angular/angular/issues/7144
fuente
A partir de febrero de 2017
Usando un proyecto Angular-Cli , todas las líneas en el
polyfills.ts
archivo ya no estaban comentadas, por lo que todos los polyfills ya estaban siendo utilizados.Encontré esta solución aquí para solucionar mi problema.
Para resumir el enlace anterior, IE no admite funciones de flecha lambda / flecha gorda que son una característica de es6 . ( Esto es si polyfills.ts no funciona para usted ).
Solución : debe apuntar a es5 para que se ejecute en cualquier versión de IE, el soporte para esto solo fue introducido en el nuevo Edge Browser por Microsoft.
Esto se encuentra en
src/tsconfig.json
:fuente
.ts
archivos para que no utilicen la flecha gruesa a funciones anónimas. Creo que debería recortar una cita de ese enlace sobre cómo la salida del compilador es diferente si cambia el destino del script ecma que mitiga el problema en adelante.fuente
Para mí con iexplorer 11 y Angular 2, arreglé todos los problemas anteriores haciendo 2 cosas:
en index.html agregar:
en src \ polyfills.ts descomenta:
fuente
ERROR Error: Uncaught (in promise): TypeError: Object doesn't support property or method 'setPrototypeOf' at EmptyError (http://localhost:4200/vendor.js:102653:9)
Instalar npm Pacakages Observe que hay algunos comandos de instalación de npm en los comentarios. Si está utilizando una versión anterior de Angular CLI, también puede haber una tercera. Para las versiones de CLI angular 7, 6 y 1.7, debe ejecutar:
npm install --save classlist.js
npm install --save web-animations-js
ahora abra IE y renderice su aplicación y verifique :)
fuente
A partir de septiembre de 2017 (versión de nodo = v6.11.3, versión de npm = 3.10.10), esto es lo que funcionó para mí (gracias @Zze):
Edite
polyfills.ts
y descomente las importaciones que son necesarias para IE11.Más precisión, edite
polyfills.ts
(ubicado en lasrc
carpeta por defecto) y simplemente elimine el comentario de todas las líneas requeridas para IE11 (los comentarios dentro del archivo explican exactamente qué importaciones son necesarias para ejecutar en IE11).Una pequeña advertencia: preste atención cuando descomente las líneas para
classlist.js
yweb-animations-js
. Estas líneas comentadas tienen un comentario específico cada una: debe ejecutar los comandos npm asociados antes de descomentarlos o el procesamiento de polyfills.ts se interrumpirá.Como explicación, los polyfills son fragmentos de código que implementan una función en un navegador web que no lo admite. Es por eso que en la configuración predeterminada de polyfills.ts solo está activo un conjunto mínimo de importaciones (porque apunta a los llamados navegadores "perennes"; las últimas versiones de navegadores que se actualizan automáticamente ).
fuente
EDITAR 15/05/2018 : Esto se puede lograr con una metaetiqueta ; agregue esa etiqueta a su index.html y no tenga en cuenta esta publicación.
Esta no es una respuesta completa a la pregunta (para la respuesta técnica, consulte la respuesta de @ Zze arriba ), pero hay un paso importante que debe agregarse:
MODO DE COMPATIBILIDAD
Incluso con los polyfills apropiados en su lugar, todavía hay problemas con la ejecución de aplicaciones Angular 2+ usando los polyfills en IE11. Si está ejecutando el sitio desde un host de intranet (es decir, si lo está probando en http: // localhost u otro nombre de dominio local asignado), debe ir a la configuración de Vista de compatibilidad y desmarcar "Mostrar sitios de intranet en Vista de compatibilidad", dado que la Vista de compatibilidad de IE11 rompe un par de convenciones incluidas en los polyfills de ES5 para Angular.
fuente
Tengo una aplicación Angular4, incluso para mí también no funcionaba en el navegador IE11, he realizado los siguientes cambios, ahora funciona correctamente. Simplemente agregue el código a continuación en el archivo index.html
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
Solo necesita descomentar estas líneas debajo del archivo polyfills.ts
Estos 2 pasos anteriores resolverán su problema, por favor avíseme si habrá algo allí. ¡¡¡Gracias!!!
fuente
Si todavía tiene problemas de que no todas las funciones de JavaScript funcionan, agregue esta línea en sus polyfills. Soluciona el método faltante de 'valores':
Y esta línea corrige el método 'incluye' que falta:
fuente
Estaba teniendo el mismo problema, si ha habilitado Mostrar sitios de intranet en Vista de compatibilidad, polyfills.ts no funcionará, aún necesita agregar la siguiente línea como se ha indicado.
fuente
cambiando
tsconfig.json
resuelto mi problema
fuente
Lo que funcionó para mí es que seguí los siguientes pasos para mejorar el rendimiento de mi aplicación en IE 11 1.) En el archivo Index.html, agregue los siguientes CDN
2.) En el archivo polyfills.ts y agregue la siguiente importación:
fuente
fuente
Si ninguna de las otras soluciones funciona para usted, vale la pena investigar la fuente del problema. Puede ser que un módulo npm inserte directamente el código ES6, que no se puede transpilar.
En mi caso tuve el
SCRIPT1002: error de sintaxis vendor.js (114536,27) en la siguiente línea:
Busqué en la carpeta node_modules y encontré de qué archivo provenía la línea. Resultó que el culpable era punycode.js que en su versión 2.1.0 usa ES6 directamente.
Después de que lo bajé a 1.4.1, que usa ES5, el problema se resolvió.
fuente
Cómo resolver este problema en Angular8
polyfills.ts descomenta
import 'classlist.js';
yimport 'web-animations-js';
luego instala dos dependencias usandonpm install --save classlist.js
ynpm install --save web-animations-js
.actualizar
tsconfig.json
con"target":"es5",
luego
ng serve
ejecute la aplicación y ábrala en IE, funcionaráfuente
Descomente la sección IE en src / polyfill.js,
/ ** IE10 e IE11 requieren lo siguiente para el soporte de NgClass en elementos SVG * /
importar 'classlist.js';
Si hay algún error de compilación para el paquete que falta, entonces,
npm install classlist.js --save-exacto
Asegúrese de incluir la siguiente línea para establecer el modo de documento IE predeterminado. De lo contrario, se abrirá en la versión 7
fuente
Probé todas las soluciones en este hilo, así como muchas otras, sin éxito. Lo que terminó solucionando esto fue actualizar todos los paquetes de mi proyecto, incluidos los cambios de versión PRINCIPALES. Entonces:
Eso es. Desearía poder determinar qué biblioteca fue la culpable. El error real que estaba recibiendo era "Error de sintaxis" en vendor.js en Angular 6.
fuente
Angular 9 listo para usar debería funcionar absolutamente bien en IE11 ahora.
Intenté todas las sugerencias enumeradas aquí y ninguna funcionó. Sin embargo, logré rastrearlo hasta una biblioteca específica que estaba importando
app.module
(ZXingScannerModule
para ser precisos). Si su aplicación falla en IE11 en la primera página, intente eliminar las bibliotecas de una en una y verifique en IE11; se perdió por completo en todos mis errores de advertencia de compilación. Si encuentra que este es el caso, considere la posibilidad de compartimentar el área de su sitio que utiliza esta biblioteca como un módulo de carga lenta.fuente