Android混合开发js与native交互两种方式

html向native传递数据:重点内容

一、使用window.prompt方式:

首先在html页面添加prompt执行入口:

prompt test

然后native中的WebChromeClient重写onJsPrompt方法(主要可以给html返回数据,如果没有返回数据使用onJsAlert,onJsConsole也可以实现交互)添加:
@Override
public boolean onJsPrompt(WebView view, String url, String message, String defaultValue, JsPromptResult result) {
result.confirm(“message from activity”);//设置返回数据
//2. html调用onprompt(),native中的onJsPrompt被回调 (一般常用onJsPrompt)
//这里传进来的参数就是从js的window.prompt(uri, value)传过来的参数
return true;
}

注:使用这种方式需要native中的WebView调用:mWeb.getSettings().setJavaScriptEnabled(true);

二、使用链接方式:
自定义协议如:
my://test/detail?productid=12345;
可以定义为跳转到详情处也可以类似于http的get方法传递参数

html中:
链接交互测试

native中重写WebViewClient中的shouldOverrideUrlLoading(WebView view, String url):

@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if (TextUtils.isEmpty(url)) {
return false;
}
if (url.startsWith(“my:”)) {//根据自定义自定义协议跳转到native页面或者不处理,
Toast.makeText(MainActivity.this, url, Toast.LENGTH_LONG).show();

// 1. 自定义协议,从h5 到native,不过不能返回东西到h5
return true;
}
return super.shouldOverrideUrlLoading(view, url);
}

以上两种就是html给native传数据了。
代码地址:https://github.com/divaid/HybridTest

native调用html方法:
通过webView.loadUrl(“javascript:方法名”); 来调用js中的方法。

// 无参数调用
contentWebView.loadUrl(“javascript:javacalljs()”);
// 传递参数调用
contentWebView.loadUrl(“javascript:javacalljswith(” + “’这里是调用js方法’” + “)”);

猜你喜欢

转载自blog.csdn.net/divaid/article/details/79197032