extension - depurar javascript online
¿Cuáles son algunos métodos para depurar Javascript dentro de UIWebView? (7)
Estoy tratando de descubrir por qué algo con Javascript no funciona dentro de UIWebView. Que yo sepa, no hay forma de establecer un punto de interrupción dentro de XCode para un archivo js. No hay problema, solo volveré al 2004 y usaré statemanes de alerta-- ¡oh, esperad que tampoco parecen funcionar dentro de UIWebView!
Lo único que se me ocurre es exportar mis archivos HTML y JS a mi escritorio y luego hacer mi depuración dentro de Safari. ¡Y eso funciona! Pero, por supuesto, el error con el que estoy peleando en UIWebView no ocurre en Safari.
¿Hay alguna otra forma de depuración dentro de UIWebView, o cualquier truco que pueda usar similar al uso del método de alerta de la vieja escuela?
Esta consulta encabeza a Google, por lo que vale la pena vincularse al RemoteInspector oculto en iOS5 -de lejos la mejor forma que se ha encontrado hasta ahora para depurar sus UIWebViews- solo compilación condicional antes de enviar a Apple.
Esta es una vieja pregunta. Pero aún así me gustaría compartir mis dos centavos.
He estado usando jsconsole.com para la depuración remota. Es fácil. Simplemente incluya una etiqueta de script y use los registros de la consola para depurar mediante impresión. Esto también se puede usar para depurar en un dispositivo real.
No he intentado esto todavía, pero échale un vistazo a este Weinre
Parece muy prometedor.
Puede configurar un sistema como el utilizado en PhoneGap para enviar mensajes desde JavaScript a Objective-C y registrar desde allí. En pocas palabras, están configurando document.location con un esquema personalizado y bloqueando ese esquema en la devolución de llamada del delegado.
Puede aprovechar el hecho de que UIWebView es la mayoría de los delegados para un WebView. WebKit está técnicamente indocumentado para iPhone, pero en su mayoría es el mismo que se especifica en los encabezados WebKit de escritorio, posiblemente incluyendo el WebScriptObject. Lo uso para la depuración, pero asegúrese de quitar este código antes de enviarlo a Apple.
Para obtener un WebView desde un UIWebView, implemente un método delegado como -(void) webView:(id)inWebView didFinishLoadForFrame:(id)inWebFrame
en -(void) webView:(id)inWebView didFinishLoadForFrame:(id)inWebFrame
en una subclase de UIWebView. Llame súper si usa ese.
Si estás usando iOS> = 6 y tienes un león de montaña (10.8) o Safari> = 6, puedes simplemente:
- Abra la aplicación en el simulador (o su dispositivo en XCode> = 4.5.x).
- Abre Safari (ve a
Preferences -> Advanced
y asegúrate de que esté activado "Mostrar menú de desarrollo en la barra de menú"). - Desde la barra de menú (de Safari) seleccione
Develop -> iPhone Simulator -> [your webview page]
.
Eso es !
Una vieja pregunta, pero creo que encontré la mejor solución, en mi caso necesita depurar uiwebview, pero no tenía acceso a la aplicación IOS y solo al contenido html y tenía que ver algunos registros JS, agregué el siguiente código cargar el firebug ligero JS y mostrarlo automáticamente:
llamándolo desde JS
var script = document.createElement(''script'');
script.type = ''text/javascript'';
script.src = ''https://getfirebug.com/firebug-lite-debug.js'';
document.head.appendChild(script);
o cargarlo desde html
<script type="text/javascript" src="https://getfirebug.com/firebug-lite-debug.js"></script>
alert () ciertamente funciona para mí.
Sin embargo, también puede hacer muchas otras cosas, como crear su propia alerta DHTML que aparece en una capa. Esto puede ser bueno porque puede hacer múltiples alertas en un solo div, sin detener su aplicación. También debería poder escribir un seguimiento de la pila (el seguimiento de la pila está en el objeto de excepción, y siempre puede lanzar sus propias excepciones).
Alternativamente, si se ejecuta en el simulador, su "alerta ()" personalizada podría llamar al objetivo C y mostrar la cadena en la ventana de la consola del simulador de iPhone:
document.location.href = "http://debugger/" +
encodeURIComponent(outputString);
y en el lado del objetivo C:
//--------------------------------------------------------------------
- (BOOL)webView:(UIWebView*)webView
shouldStartLoadWithRequest: (NSURLRequest*)req
navigationType:(UIWebViewNavigationType)navigationType {
if ([[[req URL] host] isEqualToString:@"debugger"]){
// do stuff with [[req URL] path]
}
}
Dicho esto, tengo una aplicación que es pesada en las cosas de UiWebView / javascript, y tiendo a hacer la mayoría de los desarrolladores de javascript en Chrome (simulando lo que es necesario desde el entorno del iPhone)