欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android中WebView与Js交互的实现方法

程序员文章站 2024-03-02 10:32:58
获取webview对象 调用webview对象的getsettings()方法,获取websettings对象 调用websettings对象的setjavascrip...

获取webview对象

调用webview对象的getsettings()方法,获取websettings对象

调用websettings对象的setjavascriptenabled()方法,设置js可用,参数:布尔值

在判断是否支持js的时候,不要用alert(),默认不起作用,可以先用document.write()测试

调用webview对象的addjavascriptinterface(obj, interfacename)方法,添加js接口,参数:object对象,string接口名称(这个对象在js中的别名)

定义一个内部类myjavascript

定义一个方法showtoast(),显示吐司,api版本大于17需要加注解@javascriptinterface

java代码:

package com.tsh.mywebview;
import android.annotation.suppresslint;
import android.app.activity;
import android.app.progressdialog;
import android.graphics.bitmap;
import android.os.bundle;
import android.view.keyevent;
import android.view.menu;
import android.view.menuitem;
import android.view.window;
import android.webkit.javascriptinterface;
import android.webkit.websettings;
import android.webkit.webview;
import android.webkit.webviewclient;
import android.widget.toast;
public class mainactivity extends activity {
private webview webview;
private progressdialog pd;
@override
protected void oncreate(bundle savedinstancestate) {
super.oncreate(savedinstancestate);
requestwindowfeature(window.feature_no_title);
setcontentview(r.layout.activity_main);
pd=new progressdialog(this);
pd.setmessage("正在加载...");
//webview的简单设置
webview=(webview) findviewbyid(r.id.wv_internet);
//http://100.65.187.106/test.php
webview.loadurl("http://100.65.187.106/test.php");
websettings websettings=webview.getsettings();
websettings.setsupportzoom(true);
websettings.setbuiltinzoomcontrols(true);
//js交互
new myjavascript().showtoast("111");
websettings.setjavascriptenabled(true);
webview.addjavascriptinterface(new myjavascript(), "android");
webview.loadurl("javascript:documentwrite('测试')");
webview.setwebviewclient(new webviewclient(){
@override
public void onpagestarted(webview view, string url, bitmap favicon) {
pd.show();
}
@override
public void onpagefinished(webview view, string url) {
pd.dismiss();
}
});
}
//暴露给js的功能接口
public class myjavascript{
//显示吐司
// 如果target 大于等于api 17,则需要加上如下注解
@javascriptinterface
public void showtoast(string text) {
toast.maketext(mainactivity.this, text, 1).show();
}
//显示loading
@javascriptinterface
public void showprogressdialog(string text) {
pd.setmessage(text);
pd.show();
}
}
//后退键
@override
public boolean onkeydown(int keycode, keyevent event) {
if(keycode==keyevent.keycode_back&&webview.cangoback()){
webview.goback();
return true;
}
return super.onkeydown(keycode, event);
}
//菜单键
@override
public boolean oncreateoptionsmenu(menu menu) {
menu.add(0, 0, 0, "刷新");
menu.add(0, 0, 1, "后退");
menu.add(0, 0, 2, "前进");
return super.oncreateoptionsmenu(menu);
}
//菜单点击事件
@override
public boolean onoptionsitemselected(menuitem item) {
switch (item.getorder()) {
case 0:
webview.reload();
break;
case 1:
if(webview.cangoback()){
webview.goback();
}
break;
case 2:
if(webview.cangoforward()){
webview.goforward();
}
break;
}
return super.onoptionsitemselected(item);
}
}

js代码:

<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8"/>
<title>测试android程序</title>
</head>
<body>
测试android和js交互
<br/>
<button onclick="showtoast()">显示吐司</button>
<br/>
<button onclick="showprogressdialog()">显示loading</button>
<script type="text/javascript">
function showtoast(){
android.showtoast("显示吐司");
}
function showprogressdialog(){
android.showprogressdialog("显示进度条");
}
</script>
</body>
</html>

以上内容是小编给大家介绍的android中webview与js交互的实现方法,希望对大家以上帮助!