Tengo un UIWebView
que carga una página HTML. Esta página tiene dos botones, digamos Exit y Submit. No deseo que los usuarios puedan hacer clic en el botón Salir, por lo que una vez que la página ha terminado de cargarse (es decir, se llama al webViewDidFinishLoad
), utilizo stringByEvaluatingJavaScriptFromString
para eliminar uno de estos botones, manipulando el HTML. También deshabilito la interacción del usuario en el UIWebView
en webViewDidStartLoad
, y lo habilito de nuevo en webViewDidFinishLoad
.Determinar cuándo ha finalizado stringByEvaluatingJavaScriptFromString
El problema que estoy descubriendo es que stringByEvaluatingJavaScriptFromString
tarda uno o dos minutos en completarse, y parece que está hecho en su propio hilo. Entonces, lo que está sucediendo es que se llama webViewDidFinishLoad
, la interacción del usuario está habilitada en el UIWebView
, y si el usuario es rápido, puede hacer clic en el botón Salir antes de que stringByEvaluatingJavaScriptFromString
haya finalizado. Como stringByEvaluatingJavaScriptFromString
parece estar en su propio hilo sin forma de saber cuándo está terminado (no llama al webViewDidFinishLoad
), la única forma de evitar por completo que los usuarios toquen el botón Salir que puedo ver es habilitar solo la interacción del usuario en UIWebView después un poco de retraso, que no es confiable (¿cómo puedo saber realmente por cuánto tiempo me demoraré?).
¿Estoy en lo correcto porque stringByEvaluatingJavaScriptFromString
está hecho en el hilo, y no tengo manera de saber cuándo está terminado? ¿Alguna otra sugerencia sobre cómo solucionar este problema?
EDIT: En resumen, lo que quiero saber es si es posible desactivar un UIWebView
mientras stringByEvaluatingJavaScriptFromString
se está ejecutando, y volver a habilitar el UIWebView
cuando se termina el javascript.
EDIT 2: Hay un artículo aquí, que parece dar a entender de alguna manera puede sondear el motor de JS para ver cuando esté terminado, pero no puedo encontrar ninguna otra referencia diciendo lo mismo: http://drnicwilliams.com/2008/11/10/to-webkit-or-not-to-webkit-within-your-iphone-app/
EDIT 3 Basado en la respuesta de Brad Smith, parece que realmente necesito saber cuándo UIWebView ha terminado de cargarse después de que se haya ejecutado javascript. Se ve cada vez más como que necesito poner un retraso de algún tipo allí.
mismo problema aquí! ¿Cuál fue tu solución? –
Creo que tuve que recurrir a solo asumir que tomaría una cierta cantidad de tiempo, y retrasando mi procesamiento por al menos ese período de tiempo. –
Mismo problema. Ay, tiene que haber una mejor manera de hacer esto. –