- 静态页-test.html(放在assets跟目录下):
content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
call java method
百度一下
- Activity类SliderEpubActivity.java:
import java.util.Date;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.webkit.JsResult;
import android.webkit.WebChromeClient;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Toast;
@SuppressLint("SetJavaScriptEnabled")
【移动开发|android-WebView详解实例(JavaScript调用Java方法,Java调用JavaScript方法)】public class SliderEpubActivity extends Activity {
private static final String TAG="SliderEpubActivity";
private Handler handler;
private WebView myWebView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
initView();
setContentView(myWebView);
setData2WebView();
}
private void initView(){
myWebView=new WebView(this);
handler=new Handler();
setSupportJavaScript();
setInterface4JavaScript();
setWebViewClient();
setWebViewChromeClient();
}
private void setData2WebView(){
myWebView.loadUrl("file:///android_asset/test.html");
}
/**
* 设置WebView对象支持javascript
*/
private void setSupportJavaScript(){
WebSettings set = myWebView.getSettings();
set.setJavaScriptEnabled(true);
}
/**
* 添加java方法的调用接口,允许javascript脚本调用java方法
*/
private void setInterface4JavaScript(){
myWebView.addJavascriptInterface(new Object() {
//这里的方法是随意添加的
public void javaMethod(final String argsFromJavaScript) {
handler.post(new Runnable() {
@Override
public void run() {
showMsg("["+new Date()+"] 消息来自HTML页面:"+argsFromJavaScript);
}
});
}
}, "android_interface"); //Javascript通过“android_interface”调用Java方法
}
/**
* WebView中链接的跳转
* WebViewClient主要帮助WebView处理各种通知、请求事件
*/
private void setWebViewClient(){
myWebView.setWebViewClient(new WebViewClient(){
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
showMsg(url);
//直接在当前WebView中加载url
view.loadUrl(url);
return true;
//return super.shouldOverrideUrlLoading(view, url);
}
//当页面加载完成时调用Javascript方法
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
callJavascriptMethod();
}
});
}
/**
* 调用页面中的javascript方法
*/
private void callJavascriptMethod(){
myWebView.loadUrl("javascript:show('我是activity传过来的数据')");
}
/**
* 处理WebView加载网页弹出的对话框
*/
private void setWebViewChromeClient(){
myWebView.setWebChromeClient(new WebChromeClient(){
@Override
public boolean onJsAlert(WebView view, String url,
String message,JsResult result) {
showMsg(message);
//此处应该调用super的onJsAlert,否则内容无法加载,页面将显示空白
return super.onJsAlert(view, url, message, result);
}
});
}
private void showMsg(String msg) {
Toast.makeText(this, msg, Toast.LENGTH_LONG).show();
}
}
- 项目文件-AndroidManifest.xml:
android:installLocation="preferExternal"
android:versionCode="23"
android:versionName="1.6.2">
android:launchMode="singleTop" android:theme="@android:style/Theme.NoTitleBar">
推荐阅读
- 操作系统|[译]从内部了解现代浏览器(1)
- Java|Java基础——数组
- 人工智能|干货!人体姿态估计与运动预测
- web网页模板|如此优秀的JS轮播图,写完老师都沉默了
- java简介|Java是什么(Java能用来干什么?)
- Java|规范的打印日志
- Linux|109 个实用 shell 脚本
- 程序员|【高级Java架构师系统学习】毕业一年萌新的Java大厂面经,最新整理
- JavaScript|vue 基于axios封装request接口请求——request.js文件
- vue.js|vue中使用axios封装成request使用