好吧,自问自答吧;
我用的版本是1.9.9.45003,差不多是官方整合所有jar变为类库之前较新的一个版本;
之前尝试升级,但是我们的app不需要这么多类库包含的模块,又不能动态移除,避免APP体积变大,所以放弃了升级;
回归正题:安卓原生代码直接调主窗口的JS要如何实现?
// 获取当前Activity对应的当前View,这个View是io.dcloud.common.adapter.ui.WebViewImpl的实例
View currentView = mainActivity.u.findFocus();
// WebViewImplAdapter 自定义类,调用AdaWebview的evalJS方法
WebViewImplAdapter webViewImplAdapter = new WebViewImplAdapter(currentView);
webViewImplAdapter.evalJS(jsStr);
实现步骤:
io.dcloud.common.adapter.ui.WebViewImpl是一个外部不可见的,所以需要通过包内的其他Public类进行访问,下面是我自定义的类:
package io.dcloud.common.adapter.ui;
import android.view.View;
/**
* 实现WebViewImpl的访问,用来调取页面的JS
**/
public class WebViewImplAdapter {
private WebViewImpl webView;
public WebViewImplAdapter(View webView) {
this.webView = (WebViewImpl) webView;
}
public void evalJS(String jsStr) {
this.webView.mAdaWebview.evalJS(jsStr);
}
public void evalJS(String jsStr, ReceiveJSValue.ReceiveJSValueCallback receiveJSValueCallback) {
this.webView.mAdaWebview.evalJS(jsStr, receiveJSValueCallback);
}
}
2 个回复
碧霜寒冰 (作者)
好吧,自问自答吧;
我用的版本是1.9.9.45003,差不多是官方整合所有jar变为类库之前较新的一个版本;
之前尝试升级,但是我们的app不需要这么多类库包含的模块,又不能动态移除,避免APP体积变大,所以放弃了升级;
回归正题:安卓原生代码直接调主窗口的JS要如何实现?
实现步骤:
io.dcloud.common.adapter.ui.WebViewImpl是一个外部不可见的,所以需要通过包内的其他Public类进行访问,下面是我自定义的类:
zzyzzy
myWebVie.evalJS("javascript:pluginGetCartNum()", new ReceiveJSValue.ReceiveJSValueCallback() {
@Override
public String callback(JSONArray jsonArray) {
return null;
}
});
我这样写为什么出发不了回调,无法取到js执行的返回值
碧霜寒冰 (作者)
js能够触发执行吗
2019-02-15 16:22
zzyzzy
js也触发不了,这样写才能触发myWebVie.evalJS("javascript:pluginGetCartNum()"),加上回调就不行了
2019-02-15 16:41
zzyzzy
js是这样写的只是简单返回个值
function pluginGetCartNum(){
return [vm.cartNum];
}
js也触发不了,这样写才能触发myWebVie.evalJS("javascript:pluginGetCartNum()"),加上回调就不行了
2019-02-15 16:42