chuchu
chuchu
  • 发布:2015-07-14 15:48
  • 更新:2018-07-24 17:13
  • 阅读:3279

android WebApp 集成方式怎么使用java调用js

分类:5+ SDK

如题,怎么在android的java和ios的oc下主动调用javascript方法。
原生应用集成的。所以使用webapp方式。

2015-07-14 15:48 1 条评论 负责人:无 分享
已邀请:
desireyao

desireyao - 安卓 html5

请问你现在解决了没?我也遇到此问题。

zhl

zhl

同样的方式webview.evalJS,webview集成方式OK,webApp集成方式就不行

  • zhl

    webview.evalJS("jsonFromJava()", new ReceiveJSValue.ReceiveJSValueCallback() {

    @Override

    public String callback(JSONArray jsonArray) {


                return null;  
    }
    });

    2016-05-20 15:17

  • 2***@qq.com

    已经解决了


    2018-04-11 11:10

  • 大帅锅

    回复 2***@qq.com: 您好,我这边也是SDKWebApp形式加载的,一直不能在Android原生传数据到uniapp,请问您那边是怎么处理的啊?麻烦告知,万分感谢


    2020-02-24 17:26

1***@163.com

1***@163.com

同问

2***@qq.com

2***@qq.com - hacker

同问

2***@qq.com

2***@qq.com - hacker

WebAPP集成,本地打包,有两种方式java js通信
1.DCloud插件模式,参考SDK DEMO的H5Plugin,
Java:继承StandardFeature写接口。
public class DBControlPlugin extends StandardFeature
{
public void PluginTestFunction(IWebview pWebview, JSONArray array)
{
// 原生代码中获取JS层传递的参数,
// 参数的获取顺序与JS层传递的顺序一致
Log.d("DBControlPlugin", "PluginTestFunction");
String CallBackID = array.optString(0);
JSONArray newArray = new JSONArray();
newArray.put(array.optString(1));
newArray.put(array.optString(2));
newArray.put(array.optString(3));
newArray.put(array.optString(4));
// 调用方法将原生代码的执行结果返回给js层并触发相应的JS层回调函数
JSUtil.execCallback(pWebview, CallBackID, newArray, JSUtil.OK, false);

}  

}

DCloud配置dcloud_properties.xml,增加<feature
name="DBControlPlugin "
value="com.example.H5PlusPlugin.DBControlPlugin " />
</features>
注意:配置文件中的name就是exec的第一个参数,value是java的类位置。

JS代码:window.plus.bridge.exec("DBControlPlugin", "PluginTestFunction", [callbackID, Argus1, Argus2, Argus3, Argus4]);

java调用js:JSUtil.execCallback可以调用js
js调用java: window.plus.bridge.exec

2.WebView的addJavascriptInterface方式,网上很多事例,此处只讲关键代码:
webView = SDK.obatinFirstPage(app).obtainWebview();
webView.getSettings().setJavaScriptEnabled(true);
webView.addJavascriptInterface(new JSInterface(), "jsi");

java调用js: webView.loadUrl("javascript:jsText('"+text+"')");
js调用java: jsi.func

总结,2种方案都可以实现Native和JS互相调用通信。

Yee

Yee

ArrayList<IWebview> list = SDK.obtainAllIWebview();
for (IWebview v :
list) {
if (v.obtainFullUrl().contains("你想调用的js对应的HTML文件名")) {
v.executeScript("javascript:refresh()");
}

                    }

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