Il modo più semplice per farlo è memorizzare le chiamate javascript in un plug-in o in JavascriptInterface e ripetere il metodo nel proprio lato javascript eseguendolo. In questo modo loadUrl
non viene mai chiamato.
Qualcosa di simile:
StringBuilder sb = null;
private final Object LOCK = new Object();
public void sendJavascript(String js){
synchronized(LOCK) {
if (sb == null){
sb = new StringBuilder();
sb.append("javascript:");
}
sb.append(js):
}
}
Quindi, utilizzando un javascriptInterface:
private class JsInterface {
@JavascriptInterface
public String getJavascript(){
synchronized(LOCK) {
String javascriptToRun = sb.toString();
sb = new StringBuilder();
sb.append("javascript:");
return javascriptToRun;
}
}
}
Aggiungere l'interfaccia javascript per il tuo WebView:
JsInterface jsInterface = new JavascriptInterface();
webview.addJavascriptInterface(jsInterface, "JsInterface");
E sul codice javascript impostare un intervallo di tempo per recuperare la funzione memorizzata.
EDIT
Ho appena trovato this answer, si vede la mia ha un grosso problema, i metodi non sono sincronizzati. Significa che quando chiami getJavascript()
la nostra variabile sb
potrebbe non essere ancora pronta per essere letta. Ho aggiunto il bit pertinente alla sorgente sopra.
Azionare la sicura o il vostro codice sarà inaffidabile
Maby una soluzione disordinato, si potrebbe provare a "forzare" la tastiera sia visibile (google) o controllare lo stato della tastiera, e se lo stato è "non visibile" è possibile impostare la tastiera su visibile. Non so se funziona, solo un'idea. – Mdlc