android WebView和JS交互 本地存储

一、activity_main.xml

<WebView
        android:id="@+id/main_webview"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>

二、MainActivity.java

    Context mContext;

    private WebView mWebView;
    private SharedPreferences.Editor editor;
    private SharedPreferences pref;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mContext = getApplicationContext();

        //初始化存储
        pref = MainActivity.this.getSharedPreferences("data",MODE_PRIVATE);
        editor = pref.edit();
        setContentView(R.layout.activity_main);
        //加载页面
        mWebView = (WebView) findViewById(R.id.main_webview);
        //允许webview执行javascript
        mWebView.getSettings().setJavaScriptEnabled(true);
        //支持通过JS打开新窗口
        mWebView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
        // 浏览器支持多窗口显示
        mWebView.getSettings().setSupportMultipleWindows(true);
        // 页面是否可以进行缩放
        mWebView.getSettings().setSupportZoom(false);
        // 使用WebViewClient的特性处理html页面
        mWebView.setWebViewClient(new WebViewClient());
        // 使用WebChormClient的特性处理html页面
        mWebView.setWebChromeClient(new WebChromeClient());

        //加载本地网页 app/src/main/assets
        mWebView.loadUrl("file:///android_asset/index.html");
        //加载外部网页
        //mWebView.loadUrl("http://www.baidu.com");

        //暴露方法
        mWebView.addJavascriptInterface(new Storage(),"Storage");
    }

三、Storage.java

private class Storage {

        /**
         * 存储key - value
         * @param key
         *      要存储的key
         * @param value
         *      要存储的value
         * @return
         *      0 成功 -1失败
         */
        @JavascriptInterface
        public String setItem(String key, String value) {
            Log.i("js","Storage.setItem("+key+","+value+")");
            try {
                editor.putString(key, value);
                editor.commit();
                return "0";
            } catch (Exception e) {
                e.printStackTrace();
            }
            return "-1";
        }

        /**
         * 通过key 取 value值
         * @param key
         *      key
         * @return
         *      value
         */
        @JavascriptInterface
        public String getItem(String key) {
            Log.i("js","Storage.getItem("+key+")");
            return pref.getString(key, "no result");
        }

        /**
         * 根据key值删除记录
         * @param key
         *      key
         * @return
         *      0 成功 -1失败
         */
        @JavascriptInterface
        public String removeItem(String key) {
            Log.i("js","Storage.delItem("+key+")");
            try {
                editor.remove(key);
                editor.commit();
                return "0";
            } catch (Exception e) {
                e.printStackTrace();
            }
            return "-1";
        }

        /**
         * 清空所有存储
         * @return
         *      0 成功 -1失败
         */
        @JavascriptInterface
        public String clear() {
            Log.i("js","Storage.clear()");
            try {
                editor.clear();
                editor.commit();
                return "0";
            } catch (Exception e) {
                e.printStackTrace();
            }
            return "-1";
        }
    }

四、index.html

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>测试</title>
</head>
<body>

<button id="d1">Storage.setItem()</button>
<br/><br/>

<button id="d2">Storage.getItem()</button>
<br/><br/>

<button id="d3">Storage.removeItem()</button>
<br/><br/>

<button id="d4">Storage.clear()</button>
<br/><br/>

<script src="https://cdn.bootcss.com/jquery/3.2.1/jquery.min.js"></script>
<script type="text/javascript">
    $(function(){
        $('#d1').click(function(){
            var ret = Storage.setItem('name','张三');
            alert(ret);
        })
        $('#d2').click(function(){
            var ret = Storage.getItem('name');
            alert(ret);
        })
        $('#d3').click(function(){
            var ret = Storage.removeItem('name');
            alert(ret);
        })
        $('#d4').click(function(){
            var ret = Storage.clear();
            alert(ret);
        })
    })
</script>
</body>
</html>
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值