碧霜寒冰
碧霜寒冰
  • 发布:2018-12-12 10:49
  • 更新:2019-02-15 16:04
  • 阅读:1159

Android Native代码如何调JS

分类:Native.js

1、HTML页面跨Webview调JS

WebviewObject.evalJS

2、iOS 原生代码调页面JS方法

PDRCoreAppFrame stringByEvaluatingJavaScriptFromString

我想知道安卓原生代码直接调主窗口的JS要如何实现?

2018-12-12 10:49 负责人:无 分享
已邀请:
碧霜寒冰

碧霜寒冰 (作者)

好吧,自问自答吧;

我用的版本是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);  
    }  
}
zzyzzy

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

该问题目前已经被锁定, 无法添加新回复