safe-java-js-webview-bridge
safe-java-js-webview-bridge copied to clipboard
为WebView中的Java与JavaScript提供【安全可靠】的多样互通方案
用了这个架构后,history.back()不能返回到上一个网页。
我把你的JsCallJava.java修改了一下,这样使用起来更加灵活:(你可以参考一下) new MyInjectedChromeClient(new JsCallJava.InjectObj("myjs.ui", MyJs.class),new JsCallJava.InjectObj("myjs.ui2", MyJs2.class,MyJs3.class,MyJs4.class)) package cn.pedant.SafeWebViewBridge; import android.text.TextUtils; import android.webkit.WebView; import android.util.Log; import com.google.gson.Gson; import org.json.JSONArray; import org.json.JSONObject; import java.lang.reflect.Method; import java.lang.reflect.Modifier; import java.util.HashMap; public class JsCallJava...
通过view.loadUrl("javascript:(function(b){fuction test(){}})(window))注入的类容注入到webview的哪个地方,在注入完成后通过document.getElementsByTagName('html')[0].innerHTML获取不到注入的类容。
JsCallback.java: import java.lang.ref.SoftReference; -> import java.lang.ref.WeakReference;
修复在进度略过25%及以下时, 注入js代码失败造成jsbridge整体失效
参数长度有限制,太长会报错
发现问题
发现一问题,JsCallback回调时报空指针错误: Caused by: java.lang.NullPointerException at android.webkit.WebViewClassic.loadUrlImpl(WebViewClassic.java:2678) at android.webkit.WebViewClassic.loadUrlImpl(WebViewClassic.java:2694) at android.webkit.WebViewClassic.loadUrl(WebViewClassic.java:2687) at android.webkit.WebView.loadUrl(WebView.java:804) at cn.pedant.SafeWebViewBridge.JsCallback.apply(JsCallback.java:42) at com.jidian.android.edo.util.HostJsScope$2.onComplete(HostJsScope.java:137) 我猜测可能是这样的,因为回调有延迟,callback.apply()的时候可能webview已经被关闭,导致的这个错误
Log:I/chromium: [INFO:CONSOLE(1)] "Uncaught SyntaxError: Unexpected identifier", source: (1)。 我在调用jsCallback.apply()时,传入一个String对象,在apply方法里,有这样的代码: ``` StringBuilder sb = new StringBuilder(); for (Object arg : args){ sb.append(","); boolean isStrArg = arg instanceof String; if (isStrArg) {...
谢谢!