Pregunta

pregunta corta:? Lo que hace de una excepción "sourceid" se refieren a, y cómo puedo acceder a la cadena de origen / archivo correspondiente

historia más larga:

Me postulo código Javascript en una aplicación nativa iPhone a través [UIWebView stringByEvaluatingJavaScriptFromString:]. Para ayudar al desarrollo, y posteriormente comprobar el código proporcionado por el usuario, utilizo la siguiente función para ejecutar de forma segura cualquier código:

// Inside @implementation MyJS
- (NSString *)runJS:(NSString *)js {
    // Do some escaping on 'js' to make it look like a string literal.
    js = escape(js);
    NSString *result =
        [webView stringByEvaluatingJavaScriptFromString:
            [NSString stringWithFormat:@"try { JSON.stringify(eval(\"%@\")); } except (e) { JSON.stringify(e); }", js]
        ];
    return result;
}

Si todo va bien, [MyJS runJS:js] funciona muy bien y devuelve una cadena JSON que contiene el resultado de la evaluación de la última instrucción en el código 'js'.

Ahora bien, si suceden cosas malas durante la evaluación, consigo un objeto de excepción JSONified. Por ejemplo, en el caso de un error de sintaxis en el código 'js', me sale algo como esto:

  

{ "mensaje": "Error de análisis", "línea": 1, "sourceid": 26121296}

Lo que es ya bastante útil para realizar un seguimiento de los problemas ...

Sin embargo, mientras corro a través de múltiples cadenas runJS:, me gustaría ser capaz de identificar cuál provocó la excepción (debido a un error de ejecución podría provenir de una función que se creó en una cadena de código JavaScript anterior). Esta propiedad "sourceid" parece interesante, pero no puedo encontrar lo que apunta. Se parece a una dirección de puntero (valor similar como punteros a otros objetos), pero no coincide con ninguna de las cuerdas he pasado al evaluador. ¿Cómo puedo hacer este enlace?

Para obtener puntos de bonificación: ¿Hay alguna documentación disponible sobre el medio ambiente Javascript UIWebView-específico, como este objeto excepción? El rel="nofollow guía de contenidos web Safari es agradable, pero no entra en este tipo de detalles.

¿Fue útil?

Solución

solución peor de los casos:

Dentro de cada cadena js siendo evaluado, añadir un poco de código que se produce una excepción, lo coge, extrae el sourceid y de alguna manera lo expone de modo que el método runJS: puede mantener un registro de las cuales sourceid va con cada cadena.

(esperemos que alguien va a encontrar una manera mejor y ayudar a enterrar esta respuesta feo!)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top