javascript - Cryptic "Script Error." Reportado en Javascript en Chrome y Firefox




7 Answers

El "error de secuencia de comandos". sucede en Firefox, Safari y Chrome cuando una excepción infringe la política de origen del mismo navegador, es decir, cuando el error se produce en un script alojado en un dominio que no sea el dominio de la página actual.

Este comportamiento es intencional, para evitar que los scripts pierdan información en dominios externos. Para ver un ejemplo de por qué es necesario, imagine accidentalmente visitar evilsite.com , que sirve una página con <script src="yourbank.com/index.html"> . (Sí, estamos señalando esa etiqueta de script en html, no en JS). Esto dará como resultado un error de script, pero el error es interesante porque nos puede decir si ha iniciado sesión o no. Si ha iniciado sesión, el error podría ser 'Welcome Fred...' is undefined , mientras que si no lo está podría ser 'Please Login ...' is undefined . Algo en esa línea.

Si evilsite.com hace esto para las 20 principales instituciones bancarias, ellos tendrían una muy buena idea de qué sitios bancarios visitarás, y podrían proporcionar una página de phishing mucho más específica. (Este es solo un ejemplo, por supuesto. Pero ilustra por qué los navegadores no deberían permitir que ningún dato traspase los límites del dominio).

He probado esto en las últimas versiones de Safari, Chrome y Firefox; todos hacen esto. IE9 no: trata las excepciones de origen x lo mismo que las de origen mismo. (Y Opera no admite onerror).

De la boca de los caballos: fuente de WebKit que comprueba el origen al pasar excepciones a onerror (). Y la fuente de Firefox que verifica .

ACTUALIZACIÓN (21/10/11) : El error de Firefox que rastrea este problema incluye un enlace a la publicación del blog que inspiró este comportamiento.

ACTUALIZACIÓN (12/2/14) : ahora puede habilitar el informe de error completo entre dominios en algunos navegadores especificando un atributo crossorigin en las etiquetas de scripts y haciendo que el servidor envíe los encabezados de respuesta HTTP CORS apropiados.

Tengo un script que detecta errores de Javascript en mi sitio web y los envía a mi back-end para generar informes. Informa el primer error encontrado, el supuesto número de línea y la hora.

EDIT para incluir doctype:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en" xmlns:fb="http://www.facebook.com/2008/fbml">

...

<script type="text/javascript">
//<![CDATA[
// for debugging javascript!
(function(window){
    window.onerror = function(msg, url, ln) {
        //transform errors
        if (typeof(msg) === 'object' && msg.srcElement && msg.target) {
            if(msg.srcElement == '[object HTMLScriptElement]' && msg.target == '[object HTMLScriptElement]'){
                msg = 'Error loading script';
            }else{
                msg = 'Event Error - target:' + msg.target + ' srcElement:' + msg.srcElement;
            }
        }

        msg = msg.toString();

        //ignore errors
        if(msg.indexOf("Location.toString") > -1){
            return;
        }
        if(msg.indexOf("Error loading script") > -1){
            return;
        }

        //report errors
        window.onerror = function(){};
        (new Image()).src = "/jserror.php?msg=" + encodeURIComponent(msg) + "&url=" + encodeURIComponent(url || document.location.toString().replace(/#.*$/, "")) + "&ln=" + parseInt(ln || 0) + "&r=" + (+new Date());
    };
})(window);
//]]>
</script>

Debido a este script, soy muy consciente de cualquier error de javascript que esté sucediendo en mi sitio. Uno de los mayores delincuentes es "Error de secuencia de comandos". en la línea 0. en Chrome 10+ y Firefox 3+. Este error no existe (¿o se puede llamar algo más?) En Internet Explorer.

Corrección (5/23/2013): Este error de "Error de secuencia de comandos, línea 0" ahora se muestra en IE7 y posiblemente en otras versiones de IE. Posiblemente como resultado de un parche de seguridad reciente de IE, ya que este comportamiento no existía anteriormente.

¿Alguien tiene alguna idea de lo que significa este error o qué lo causa? Sucede en aproximadamente el 0,25% de mis cargas de página generales, y representa la mitad de los errores informados.




Este tomó bastante para descubrirlo.

Hicimos muchas cosas para tratar de resolverlo, incluso hacer cosas como devolver el cuerpo del documento ENTERO a nuestros servidores a través de Ajax para tratar de resolverlo.

Todavía no estoy seguro de qué causa "Error de secuencia de comandos". (con el período BTW, así es como aparece en nuestro registrador Ajax) en Firefox, pero en Chrome, pudimos reducirlo a ...

Tambor de rollo ...

La función de traducción automática de Google Chrome.

Muchas personas de habla inglesa probablemente ni siquiera conocen esta función, pero para probarla, supongo que visitar un sitio que no esté en inglés con Chrome. O mejor aún, si exploras las opciones de Chrome, hay un lugar para cambiar el idioma del navegador. Cámbielo a algo que no sea inglés, reinicie el navegador y visite un sitio en inglés.

Debería obtener el listón en la parte superior preguntándole si desea que Chrome traduzca la página por usted.

En nuestro caso, de todos modos, el traductor estaba causando el problema ya que inyecta una etiqueta de script en el cuerpo del documento y (adivinar aquí) usa algún tipo de sistema basado en JS para enviar el contenido a los servidores de Google y lograr que lo traduzcan.

Aunque el error en la consola no se refirió a algo, el mensaje que se enviaba a window.onerror fue "Error de script".

De todos modos, hay una cura.

http://googlewebmastercentral.blogspot.com/2007/12/answering-more-popular-picks-meta-tags.html

<meta name="google" content="notranslate"/>

Esto hará 2 cosas (por lo que sabemos, ¿quizás más?):

a) Desactiva la barra de traducción para que no aparezca en Chrome.

b) Deshabilite la traducción de la página a través de translate.google.com.

En nuestra situación de todos modos, esto resolvió UNA TONELADA de estos "errores de guiones". problemas que estábamos experimentando.

Disculpe los errores de ortografía en esta publicación, todavía estoy en un modo no inglés en Chrome escribiendo esto, y el corrector ortográfico no está configurado en inglés;) Es hora de volver atrás.

¡Disfrutar!




Tuve un problema similar: mis scripts son servidos por un subdominio y caen bajo la misma restricción de origen. Sin embargo, resolví esto por:

1) agregar cada etiqueta de script de esta manera:

<script type="text/javascript" src="http://subdomain.mydomain.tld" crossorigin="*.mydomain.tld" />

2) modificar el httpd.conf de apache añadiendo lo siguiente dentro de cada vhost (debe poder acoplar mod_headers):

<IfModule mod_headers.c>
Header add Access-Control-Allow-Origin "*.mydomain.tld"
</IfModule>

Espero que esto ayude ...

EDITAR

En uno de mi servidor no pude hacer que esto fuera funcional excepto reemplazando

*.mydomain.tld

por

*

Tenga en cuenta las fallas que potencialmente le permiten phishing a la información extendida. La documentación en CORS, same-origin, img & fonts, cdn está disponible, pero hay muy pocos datos sobre los detalles de crossorigin de las etiquetas script disponibles.




En Chrome, también recibo "Error de script" (en la línea 0) al cargar tanto el HTML como Javascript desde el file:// . Esto no ocurre en Firefox. Probablemente la protección del mismo origen demasiado celosa de Chrome.

Todo es bueno cuando se carga el mismo HTML y Javascript a través de HTTP.




¿Qué tal el de abajo? El error de secuencia de comandos no está disponible a través de JavaScript, así que solo aísle ese caso en particular y trátelo lo mejor que pueda.

window.onerror = function (msg, url, lineNo, columnNo, error) {
    var string = msg.toLowerCase();
    var substring = "script error";
    if (string.indexOf(substring) > -1){
        alert('Script Error: See Browser Console for Detail');
    } else {
        alert(msg, url, lineNo, columnNo, error);
    }
  return false;
};



He hecho un poco de búsqueda y parece que un "Error de secuencia de comandos" significa que tuvo problemas para cargar un archivo que se le pidió que buscara. Esto podría ser un problema de almacenamiento en caché en el lado del cliente, o podría ser un problema del servidor debido a la sobrecarga.

Lo más probable es que sea causado por algo como esto, donde el script en sí es el archivo que no puede cargarse, de ahí el error que ocurre en la línea 0.

<script type="text/javascript" src="somescript.js"></script>



La ampliación del código fuente de Firefox revela que no hay un "Script Error." . Por lo tanto, es muy probable que algún script en su sitio arroje un error no detectado como este:

throw new Error('Script Error.');

Probablemente esta afirmación solo se alcance en Firefox y Chrome.

Sin embargo, no estoy seguro de por qué no hay un número de línea. Tal vez algún problema eval() ?




Related

javascript firefox google-chrome error-handling