javascript xmlhttprequest cors

Capturando un error de Access-Control-Allow-Origin en JavaScript



xmlhttprequest cors (1)

Si bien el navegador en sí registrará un mensaje de error más detallado en la consola, no puede acceder a ese mensaje desde su código. Ver https://bugs.chromium.org/p/chromium/issues/detail?id=118096#c5 :

Los detalles de los errores de XHR y Fetch API no están expuestos a JavaScript por razones de seguridad.

En cuanto a las especificaciones que realmente requieren aquí, la especificación Fetch es lo que define los detalles del "mensaje de estado" que se debe proporcionar en caso de error, incluso si se utiliza la API XHR en lugar de la API Fetch (la especificación XHR hace referencia a Fetch spec). Y para cualquier error de red o respuesta bloqueada por el navegador, la especificación Fetch requiere que el mensaje de estado sea "la secuencia de bytes vacía" :

Un error de red es una respuesta cuyo estado siempre es 0, el mensaje de estado es siempre la secuencia de bytes vacía , la lista de encabezados siempre está vacía, el cuerpo siempre es nulo y el trailer siempre está vacío.

Por lo tanto, todo lo que puede recuperar de cualquier objeto de error que pueda atrapar es "TypeError: Error al recuperar" o algo así.

Si está utilizando XHR, el único medio que tiene para manejar un error es el controlador de eventos onerror :

xhr.onerror = function() { console.log("Error occurred but I dunno what exactly.")}

Escribí una función que sigue devolviendo un error de Access-Control-Allow-Origin. Esto está realmente bien para mí; No quiero arreglar esto. Solo quiero atraparlo para poder leer su mensaje en mi programa.

Todo el código que provoca el error se encuentra dentro de mi bloque try, y mi bloque catch muestra el mensaje de cadena del error. Sin embargo, cuando ejecuto el código, no se detecta ningún error y el error aparece en rojo en la consola. ¿Cómo capto este error y almaceno su mensaje?

try { var xhr = new XMLHttpRequest(); xhr.onload = function() { if (this.status < 400 && this.status >= 300) { console.log(''this redirects to '' + this.getResponseHeader("Location")); } else { console.log(''doesn/'t redirect''); } } xhr.open(''HEAD'', $scope.suggLink, true); xhr.send(); } catch(e) { console.log(''Caught it!''); console.log(e.message); }