Webview中android与Javascript(js)交互
来源:互联网 发布:中国网络资讯台李学科 编辑:程序博客网 时间:2024/06/02 05:37
Android 中通过WebView和HTML实现JS交互
Android(Java)与JavaScript(HTML)交互有四种情况:
1) Android(Java)调用HTML中js代码
2) Android(Java)调用HTML中js代码(带参数)
3) HTML中js调用Android(Java)代码
4) HTML中js调用Android(Java)代码(带参数)
注意:
上面四种调用方式,android和Html一定要保持一样,否则JS调不通,比如Html调用android,不带参数。如果android代码中,调用方法中带了参数。是调不通的。
1、设置webview支持JavaScript:
webSettings.setJavaScriptEnabled(true);
2、JS接口名称jsObj 要与后台保持一致。否则调不通
void android.webkit.WebView.addJavascriptInterface(Object obj, String interfaceName)
Android :
mWebView.addJavascriptInterface(getHtmlObject(), "jsObj");
Html :
var str = window.jsObj.HtmlcallJava(); //jsObj 就是Android中addJavaScriptInterface 中的第二个参数,接口名称。// HtmlcallJava 就是<span style="font-family: Arial, Helvetica, sans-serif;">Android中addJavaScriptInterface 第一个参数的方法中的一个方法名称。
3、自己测试HTML页面和android的交互,可以把Html文件放到本地assets文件夹中,用webview load这个Html文件。
mWebView.loadUrl("file:///android_asset/index.html");
4、android 调用 HTML 中的方法,不带参,带一个参数,带两个参数的格式
mWebView.loadUrl("javascript:showFromHtml()"); // 不带参数
mWebView.loadUrl("javascript:showFromHtml2('Hello world')"); // 带一个参数
String strData;String strObjId;String callJs = "javascript:returnImagePath('" + strData + "', '" + strObjId + "')"; //带两个参数webView.loadUrl(callJs);
5、mWebView.addJavascriptInterface(getHtmlObject(), "jsObj"); 第一个参数的两种写法。
一、
mWebView.addJavascriptInterface(getHtmlObject(), "jsObj");
private Object getHtmlObject(){Object insertObj = new Object(){//Html调用android本地Java方法。返回String类型数据给Html@JavascriptInterfacepublic String HtmlcallJava(){return "Html call Java";}//Html调用android本地Java方法。注意:HTML中带参数了。var str = window.jsObj.HtmlcallJava2("Hello world");//Java方法也要带参数(否则会调不通)@JavascriptInterfacepublic String HtmlcallJava2(final String param){return "Html call Java : " + param;}@JavascriptInterfacepublic void JavacallHtml(){runOnUiThread(new Runnable() {@Overridepublic void run() {mWebView.loadUrl("javascript: showFromHtml()");Toast.makeText(JSAndroidActivity.this, "clickBtn", Toast.LENGTH_SHORT).show();}});}@JavascriptInterfacepublic void JavacallHtml2(){runOnUiThread(new Runnable() {@Overridepublic void run() {mWebView.loadUrl("javascript: showFromHtml2('IT-homer blog')");Toast.makeText(JSAndroidActivity.this, "clickBtn2", Toast.LENGTH_SHORT).show();}});}};return insertObj;}
二、
webview.addJavascriptInterface(new JSCallBack(), "js");
protected Handler mHandler = new Handler();
private final class JSCallBack {@JavascriptInterfacepublic void toast(final String str) {mHandler.post(new Runnable() {@Overridepublic void run() {showToast(str);}});}@JavascriptInterfacepublic void reload() {mHandler.post(new Runnable() {@Overridepublic void run() {webview.reload();}});}@JavascriptInterfacepublic void showAlert(String msg){showToast(msg);}@JavascriptInterfacepublic void pay(final String payInfo){System.out.println("payInfo:"+payInfo);mHandler.post(new Runnable() {@Overridepublic void run() {startAlipay(payInfo);}});}@JavascriptInterfacepublic void goHome(){Intent intent = new Intent(mContext, HomeActivity.class);intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);intent.putExtra("module", "HomeFragment");startActivity(intent);finish();}}推荐第二种,更清晰,尽量用handle处理。
源码
0 0
- Webview中android与Javascript(js)交互
- Android中WebView与Javascript的交互
- Android中webView与javascript交互
- Android中 WebView与Javascript简单交互
- Android中WebView与Javascript交互
- Android中WebView与JS的交互
- Android中webView与JS的交互
- Android中WebView与JS交互
- Android中WebView与JS的交互
- Android 中WebView与JS交互
- Android中webview与js交互
- android java与webview中js交互
- Android中WebView与JS交互
- android中webview与js的交互
- Android中webview与js交互
- Android中webview与js双向交互
- Android中Webview与js交互
- android中WebView与JS的交互
- 一个搬砖渣渣的自我修炼
- JAVA XML的解析与创建
- Android Studio
- chown 改变文件所有者
- MAC: MySql修改root密码 mac Mysql忘记密码 mysql mac重置密码
- Webview中android与Javascript(js)交互
- jQuery查看dom元素上绑定的事件列表
- Ubuntu系统安装与初步应用笔记
- spring事务
- [C#]Ajax XMLHttp 对象的获取方法
- 跟我学Android UI高级之十五碎片Fragment
- Android Studio 更新后一直停在Refreshing gradle project问题解决
- android 电池(二):android关机充电流程、充电画面显示
- 反射工厂