2014-04-14 5 views
6

Lasciatemi spiegare la mia domanda che mi disturba da molto tempo. Qualsiasi aiuto sarà apprezzato. Per favore aiuto.Impossibile chiamare tutte le funzioni iOS da UIWebView utilizzando JavaScriptCore e JSContext

Sto lavorando su un tipo di app ibrida in iOS. Sto usando UIWebView per il caricamento di pagine web da http://myserver.com (il suo esempio il suo URL non effettivo) Ho ospitato più pagine web su questo server.

Sto usando "JSContext" per comunicare tra javascript (pagine web caricate dal mio server) in UIWebView e funzioni native iOS.

Ho seguito la procedura indicata al numero UIWebView JavaScript losing reference to iOS JSContext namespace (object), il contesto si stava perdendo, ma ho aggiunto una soluzione alternativa in risposta a questa domanda. Evento quindi per alcuni frame load all'interno di UIWebView il mio contesto iOS sta sparendo. Dopo aver seguito i seguenti passaggi, il contesto è sparito.

  1. che carico page1 da myserver in UIWebView. Quasi tutti funzionano bene tutte le funzioni OS native iOS sono chiamate da javascript.
  2. Ora, quando secondo page2 viene caricato come risultato di interazione in page1, nella stessa UIWebViewjavascript contesto viene svanì.

C'è un'altra cosa magica. se carico direttamente pagina2 in UIWebView anziché caricamento indiretto (pagina1 ->pagina2). Tutto funziona bene, tutti i metodi nativi sono chiamati da UIwebView come previsto. Per favore aiuto. Se vuoi maggiori informazioni si prega di chiedere.

+0

È duplicato per http://stackoverflow.com/questions/21714365/uiwebview-javascript-losing-reference-to-ios-jscontext-namespace-object? – Andy

+0

Questa è la stessa cosa che accade su http://stackoverflow.com/questions/21714365/uiwebview-javascript-losing-reference-to-ios-jscontext-namespace-object. Quando viene caricata una nuova pagina, la nuova pagina ottiene un nuovo JSContext. Hai menzionato un carico di frame. Il frame ha il set JSContext correttamente? – pwc

+0

Quando parte della pagina viene caricata senza chiamare webViewDidFinishedloading. Non riesco a impostare JSContext per tale richiesta. – jnix

risposta

2

Prima di tutto, rubare e utilizzare il JavaScriptContext di UIWebView in questo modo è probabilmente un percorso per il rifiuto dell'app.

Ma se questo è solo un progetto di scienza ...

Si potrebbe provare un'altra tecnica per l'ottenimento del JavaScriptContext. Vi presento una soluzione a questo progetto GitHub:

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

Fondamentalmente sto usando una certa conoscenza di come WebKit lavora per implementare una categoria a NSObject per intercettare alcuni metodi non-handeled WebKit delegato che sono chiamati ogni volta che una nuova JavaScriptContext è stato creato per un frame.

+0

Grazie per la risposta, ma - '(void) WebView: (UIWebView *) WebView didCreateJavaScriptContext: (JSContext *) CTX { CTX [@ "MyInterface"] = auto; o ctx [@ "window.myinterface"] = self; } ' E il mio html che chiama' window.myinterface.mynativefunc ('hello'); 'non viene chiamato affatto.Per favore aiuto. – jnix

+0

l'app di esempio funziona per te? – TomSwift

+0

Sì. Ha funzionato. L'app di esempio – jnix

Problemi correlati