网站首页 > 技术文章 正文
由于现如今H5的热门,做过不少与H5的交互工作了,现在总结一下。
初始化WebView
/**
* 初始化WebView
*/
private void initWebView() { // 设置setWebChromeClient对象
mWb_main.setWebChromeClient(new WebChromeClient() { @Override
public void onReceivedTitle(WebView view, String title) { super.onReceivedTitle(view, title); //设置本地的ToolBar标题
mTv_main.setText(title);
}
}); //打开网页时不调用系统浏览器, 而是在本WebView中显示
mWb_main.setWebViewClient(new WebViewClient() { @Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url); return true;
}
});
WebSettings webSettings = mWb_main.getSettings();
webSettings.setJavaScriptEnabled(true);
webSettings.setDefaultTextEncodingName("UTF-8");//设置编码
webSettings.setUseWideViewPort(true);//设置此属性,可任意比例缩放webSettings.setLoadWithOverviewMode(true);
}
Android 调用JS的无参数方法
在HTML5中的header中加入这段代码
<script>
//这是被Android调用的JS方法function noParamFunction() {document.getElementById("noparam_ta").style.fontSize =40+"px";
}</script>
然后在Android里边我们调用
/**
* Android 调用 JS代码
*/
mButton.setOnClickListener(new View.OnClickListener() { @Override
public void onClick(View v) {
mWb_main.loadUrl("javascript:noParamFunction();");
}
});
Android 调用JS的有参数方法
在HTML5中的header中加入这段代码
<script>
//这是被Android调用的JS方法function noParamFunction() {
document.getElementById("noparam_ta").innerHTML=data;
}</script>
然后在Android里边我们调用的时候需要加入‘”+str+”’ 这种形式的,才可以想HTML传递参数
/**
* Android 调用 JS代码
*/
String str = "Hello JS"
mButton.setOnClickListener(new View.OnClickListener() { @Override
public void onClick(View v) {
mWb_main.loadUrl("javascript:noParamFunction('"+str+"');");
}
});
JS调用Android 代码
首先我们要定义一个类供JS调用,这里需要注意在4.2以前,不需要在方法前加上 @JavascriptInterface,4.2以后的系统就需要加上了,代码如下
public class JavaScriptinterface {
private Context mContext; /** Instantiate the interface and set the context */
public JavaScriptinterface(Context c) {
mContext = c;
}/**
* 安卓系统4.2以上的系统需要加上 @JavascriptInterface,才可以让webview读取自己的方法
* @param toast
*/
@JavascriptInterface
public void showToast(String toast) {
Toast.makeText(mContext, toast, Toast.LENGTH_SHORT).show();
Log.e("----","--------------------------------------------showToast");
}
}
然后在HTML中header里边加入script代码
<script>
//这是js调用Android的方法
function showAndroidToast(str) {
javascript:window.android.showToast(str);
}</script>
在Body标签加入
<input type="button" value="调用安卓的方法" onClick="showAndroidToast('调用成功')" />
然后在我们Android 端写入如下代码就可以调用了
/**
* JS 调用 Android 代码
*/
mWb_main.addJavascriptInterface(new JavaScriptinterface(this), "android");1234512345
Android读取html的标题
// 设置setWebChromeClient对象
mWb_main.setWebChromeClient(new WebChromeClient() { @Override
public void onReceivedTitle(WebView view, String title) { super.onReceivedTitle(view, title); //设置本地的ToolBar标题
mTv_main.setText(title);
}
});
Android允许Html的Alert()对话框
// 设置setWebChromeClient对象
mWb_main.setWebChromeClient(new WebChromeClient() { //处理javascript中的alertpublic boolean onJsAlert(WebView view, String url, String message, final JsResult result) { //构建一个Builder来显示网页中的对话框
AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
builder.setTitle("Alert");
builder.setMessage(message);
builder.setPositiveButton(android.R.string.ok, new AlertDialog.OnClickListener() { public void onClick(DialogInterface dialog, int which) {
result.confirm();
}
});
builder.setCancelable(false);
builder.create();
builder.show(); return true;
} //处理javascript中的confirm
public boolean onJsConfirm(WebView view, String url, String message, final JsResult result) {
AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
builder.setTitle("confirm");
builder.setMessage(message);
builder.setPositiveButton(android.R.string.ok, new AlertDialog.OnClickListener() { public void onClick(DialogInterface dialog, int which) {
result.confirm();
}
});
builder.setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) {
result.cancel();
}
});
builder.setCancelable(false);
builder.create();
builder.show(); return true;
}
});
- 上一篇: 7 行代码 3 分钟:从零开始实现一门编程语言
- 下一篇: 前端JS脚本调用Unity内的函数2021
猜你喜欢
- 2025-05-27 玩转JavaScript OOP[02]--类的实现
- 2025-05-27 java高级用法之:在JNA中将本地方法映射到JAVA代码中
- 2025-05-27 Node.js与C++:napi调用JavaScript回调函数
- 2025-05-27 1小时打造HaaS版小小蛮驴智能车
- 2025-05-27 easyui datagrid 查询会触发onUncheck问题
- 2025-05-27 前端JS脚本调用Unity内的函数2021
- 2025-05-27 7 行代码 3 分钟:从零开始实现一门编程语言
- 2025-05-27 tvOS真的代表了应用的未来吗?
- 2025-05-27 JavaScript中常用数据类型,你知道几个?
- 2025-05-27 深入理解javascript--笔记
- 08-06中等生如何学好初二数学函数篇
- 08-06C#构造函数
- 08-06初中数学:一次函数学习要点和方法
- 08-06仓颉编程语言基础-数据类型—结构类型
- 08-06C++实现委托机制
- 08-06初中VS高中三角函数:从"固定镜头"到"360°全景",数学视野升级
- 08-06一文讲透PLC中Static和Temp变量的区别
- 08-06类三剑客:一招修改所有对象!类方法与静态方法的核心区别!
- 1522℃桌面软件开发新体验!用 Blazor Hybrid 打造简洁高效的视频处理工具
- 650℃Dify工具使用全场景:dify-sandbox沙盒的原理(源码篇·第2期)
- 527℃MySQL service启动脚本浅析(r12笔记第59天)
- 492℃服务器异常重启,导致mysql启动失败,问题解决过程记录
- 492℃启用MySQL查询缓存(mysql8.0查询缓存)
- 479℃「赵强老师」MySQL的闪回(赵强iso是哪个大学毕业的)
- 461℃mysql服务怎么启动和关闭?(mysql服务怎么启动和关闭)
- 460℃MySQL server PID file could not be found!失败
- 最近发表
- 标签列表
-
- cmd/c (90)
- c++中::是什么意思 (84)
- 标签用于 (71)
- 主键只能有一个吗 (77)
- c#console.writeline不显示 (95)
- pythoncase语句 (88)
- es6includes (74)
- sqlset (76)
- windowsscripthost (69)
- apt-getinstall-y (100)
- node_modules怎么生成 (87)
- chromepost (71)
- flexdirection (73)
- c++int转char (80)
- mysqlany_value (79)
- static函数和普通函数 (84)
- el-date-picker开始日期早于结束日期 (70)
- asynccallback (71)
- localstorage.removeitem (74)
- vector线程安全吗 (70)
- java (73)
- js数组插入 (83)
- mac安装java (72)
- 查看mysql是否启动 (70)
- 无效的列索引 (74)