最简单的方法是将javascript调用存储在插件或JavascriptInterface中,并在javascript端执行重复方法.这样就永远不会调用loadUrl.
就像是:
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):
}
}
然后使用javascriptInterface:
private class JsInterface {
@JavascriptInterface
public String getJavascript(){
synchronized(LOCK) {
String javascriptToRun = sb.toString();
sb = new StringBuilder();
sb.append("javascript:");
return javascriptToRun;
}
}
}
将您的javascript界面??添加到您的webview:
JsInterface jsInterface = new JavascriptInterface();
webview.addJavascriptInterface(jsInterface, "JsInterface");
并在您的JavaScript代码上设置一个用于检索存储函数的定时间隔.
编辑
我刚刚发现this answer,它显示我的有一个大问题,方法不同步.当你调用getJavascript()时,我们的变量sb可能还没有准备好被读取.我已将相关位添加到上面的源代码中.
使用锁定或您的代码将不可靠