WebView中Java与JavaScript的交互

移动开发 作者: 2024-08-22 10:25:01
原文首发于微信公众号:jzman blog,欢迎关注交流! Android 开发过程中 WebView 的使用比较广泛,常用来加载网页,比如使用 WebView 加载新闻页面、使用 WebView 打
  1. 关键方法
  2. 具体实现
  3. 显示效果

关键方法

1. setJavaScriptEnabled()
public abstract void setJavaScriptEnabled(boolean flag);
2. addJavascriptInterface()
public void addJavascriptInterface(Object object,String name) {}

具体实现

  1. WebView 设置支持 JavaScript 脚本;
  2. 创建与 JavaScrpt 通信的类及供 JavaScript 调用的方法;
  3. 加载 WebView 中要显示的内容;
  4. 使用 addJavascriptInterface 方法将 Java 对象映射到 JavaScript 中;
  5. 在 JavaScript 中调用映射对象的方法,打开显示图片的 Activity;
  6. 调用 javaScript 中的方法。
第一步:
//设置支持JavaScript
webSettings.setJavaScriptEnabled(true);
第二步:
/**
 * 与 javascript 通信的 Java 对象,提供 javascript 调用的方法
 * Created by jzman on 2017/7/20 0020.
 */
public class AndroidInterface {
    private Context context;
    public AndroidInterface(Context context) {
        this.context = context;
    }

    /**
     * 添加注解 @JavascriptInterface
     * javascript 要调用的方法
     */
    @JavascriptInterface
    public void showImage(String imgUrl){
        Intent intent = new Intent();
        intent.putExtra("img",imgUrl);
        intent.setClass(context,ImageActivity.class);
        context.startActivity(intent);
    }
}
第三步:
//加载 assets 目录下的 HTML 文件
webView.loadUrl("file:///android_asset/index.html");
第四步:
//注入Java对象并映射到JavaScript中
//参数(与JaveScript通信的对象,映射到JavaScript中的对象)
webView.addJavascriptInterface(new AndroidInterface(this),"imageListener");
第五步:
<script type="text/javascript">
	function findImg(){
		//查找img标签
		var imgs = document.getElementsByTagName("img");
		//遍历img标签
		for(var i=0; i<imgs.length; i++){
			//为每一个标签设置点击事件
			imgs[i].onclick = function(){
			 //imageListener映射的Java对象
			window.imageListener.showImage(this.src);
			}
		}
	}
</script>
第六步:
//设置 WebViewClient 监听相关事件
webView.setWebViewClient(new WebViewClient(){
    //页面加载完成回调该方法
    @Override
    public void onPageFinished(WebView view,String url) {
        super.onPageFinished(view,url);
        //保证页面加载完成后Java对象注入到JavaScript中
        webView.loadUrl("javascript:findImg()");
    }
});

显示效果

原创声明
本站部分文章基于互联网的整理,我们会把真正“有用/优质”的文章整理提供给各位开发者。本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
本文链接:http://www.jiecseo.com/news/show_66616.html