WebView 中的 JavaScript 调用 Android 的方法

WebSettings 工具类提供了 setJavaScriptEnabled(true) 即可让 JavaScript 脚本来调用 Android;还提供了addJavascriptInterface(Object object, String name) 方法来暴露 Android 对象,该方法负责把 object 对象暴露成 JavaScript 中的 name 对象。点击 HTML 上面的 按钮:


package com.crazy.jscallandroid;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.webkit.WebSettings;
import android.webkit.WebView;


public class MainActivity extends AppCompatActivity {

    WebView myWebView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    //    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    //    setSupportActionBar(toolbar);

        myWebView = (WebView)findViewById(R.id.webView);
        // 此处加载 assets 目录下的 HTML 页面
        myWebView.loadUrl("file:///android_asset/test.html");
        // 获取 WebView 的设置对象
        WebSettings webSettings = myWebView.getSettings();
        // 让 JavaScript 脚本来调用 Android
        webSettings.setJavaScriptEnabled(true);
        // 将 ForJS 对象暴露给 JavaScript 脚本,以便在 test.html 页面中 JavaScript 可以通过 fjs 来调用
        myWebView.addJavascriptInterface(new ForJS(this), "fjs");
    }

}


package com.crazy.jscallandroid;

import android.content.Context;
import android.support.v7.app.AlertDialog;
import android.webkit.JavascriptInterface;
import android.widget.Toast;

public class ForJS {

    Context mContext;

    public ForJS(Context context) {
        mContext = context;
    }

    @JavascriptInterface
    public void showToast(String name){
        Toast.makeText(mContext, name + ", 你好!", Toast.LENGTH_SHORT).show();
    }
    // 用  @JavascriptInterface 修饰,将该方法暴露给 JavaScript 脚本调用
    @JavascriptInterface
    public void showList(){
        new AlertDialog.Builder(mContext)
                .setTitle("中国")
                .setIcon(R.drawable.ic_launcher)
                .setItems(new String[]{"北京", "上海", "广州"},null)
                .setPositiveButton("确定", null)
                .create()
                .show();
    }
}

布局文件只是一个简单的 WebView 文件,此处不再给出。


assets中的 test.html 脚本如下:

<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title> Js调用Android的方法 </title>
</head>
<body>
<!-- 此处的fjs是Android暴露出来的对象 -->
<input type="button" value="打招呼"
       οnclick="fjs.showToast('世界');" />
<input type="button" value="中国"
       οnclick="fjs.showList();" />
</body>
</html>



  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值