No se puede llamar a todas las funciones de iOS desde UIWebView utilizando JavaScriptCore y JSContext.

Déjame explicarte mi pregunta, me está molestando desde hace mucho time. Cualquier ayuda será apreciada. Por favor ayuda.

Estoy trabajando en un tipo de aplicación híbrida en iOS. Estoy usando UIWebView para cargar páginas web desde http://myserver.com (su ejemplo no es la URL real) He alojado varias páginas web en este server.

Estoy usando "JSContext" para comunicar entre javascript (páginas web cargadas desde mi server) en UIWebView y funciones iOS nativas.

He seguido el procedimiento dado en UIWebView JavaScript perdiendo reference al espacio de nombres iOS JSContext (object) el context se estaba perdiendo, pero he agregado la solución alternativa proporcionada en la solución de esta pregunta. Event entonces para alguna carga de fotogtwigs dentro de UIWebView mi context de iOS se está desvaneciendo. Después de seguir los siguientes pasos, el context se desvanece.

  1. Cargo page1 desde myserver en UIWebView . Casi todos funciona bien todas las funciones iOS nativo del sistema operativo se llaman desde javascript .
  2. Ahora cuando se carga la segunda página 2 como resultado de la interacción en la página 1 , en el mismo context javascript UIWebView se desvanece.

Hay una cosa más mágica. si directamente he cargado la página 2 en UIWebView en lugar de cargar indirectamente ( página1 -> página2 ). Todo funciona bien, todos los methods nativos se llaman desde UIwebView como se esperaba. Por favor ayuda. Si desea más información, pregunte.

En primer lugar, robar y usar JavaScriptContext de UIWebView de esta manera es probable que sea una ruta de acceso al rechazo de la aplicación.

Pero si esto es solo un proyecto de ciencia …

Puede probar otra técnica para get el JavaScriptContext. Presento una solución en este proyecto GitHub:

https://github.com/TomSwift/UIWebView-TS_JavaScriptContext

Básicamente estoy usando un poco de conocimiento de cómo WebKit trabaja para implementar una categoría en NSObject para interceptar algunos methods de delegado de WebKit no manipulados que se invocan cada vez que se crea un nuevo JavaScriptContext para un marco.