Hybrid:Android 中如何获取和写入 H5 localStorage 数据

Native 获取 localStorage 的数据

主要分三步:

  1. 写个接口,接收 Js 回调
  2. 添加到 WebView
  3. 主动调用 Js 获取

比如我要获取保存在 LocalStorage 中的 userKey 字段:

1.写个接口,接收 Js 回调

public class HybridInterface {
    Context context;

    InitCityInterface(Context context) {
        this.context = context;
    }

    //Js 回调方法,
    @JavascriptInterface
    public void getUserKey(String userKey){
        LogUtils.e("WebViewFragment","读取到userKey : " + userKey);
        //已经拿到值,进行相关操作
    }

}

2.添加到 WebView ,并且重命名为“shixintest”:

mWebView.addJavascriptInterface(new HybridInterface(getActivity()), "shixintest");

3.主动调用 Js 获取 /** * 获取 H5 保存在 LocalStorage 中的 __UserKey */

private void getLocalStorageUserKey() {
    if (mWebView != null && TextUtils.isEmpty(APPEnvironment.getBeforeLoginUserKey())) {
        mWebView.loadUrl(
            "javascript:(function(){
                var localStorage = window.localStorage; window.shixintest.getUserKey(localStorage.getItem('userKey'))})()");
}
}

getLocalStorageUserKey() 会通过 Js 读取 LocalStorage 的内容,然后通过 HybridInterface 传递过来。

就酱紫拿到了 LocalStorage 中的内容。

Native 写入数据到 localStorage

主要分两步:

  1. 拼接 JavaScript 代码
  2. 使用 WebView 相关 API 执行 Js 代码

比如我要给 localStorage 中的 userAgent 字段写入内容:

//1.拼接 JavaScript 代码
String userAgent = "shixinzhang";
String js = "window.localStorage.setItem('userAgent','" + userAgent + "');";
String jsUrl = "javascript:(function({
    var localStorage = window.localStorage;
    localStorage.setItem('userAgent','" + userAgent + "')
})()";

//2.根据不同版本,使用不同的 API 执行 Js
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
    mWebView.evaluateJavascript(js, null);
} else {
    mWebView.loadUrl(jsUrl);
    mWebView.reload();
}   

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Laoqi's Linux运维专列

HP服务器Linux下hpacucli常用命令

1946
来自专栏小巫技术博客

Retrofit2 & RxJava2实现单文件和多文件上传

2704
来自专栏向治洪

将图库的图片剪切并保存

最近有些用户反映保存图片之后在系统图库找不到保存的图片,遂决定彻底查看并解决下。 Adnroid中保存图片的方法可能有如下两种: 第一种是自己写方法,如下代...

19510
来自专栏技术碎碎念

windows API 开发飞机订票系统 图形化界面 (二)

首先,用到的数据结构的定义、以及全局变量和函数的声明如下: 1 // Flight.c : 定义应用程序的入口点。 2 // 3 #include ...

4407
来自专栏逸鹏说道

ExecuteReader在执行有输出参数的存储过程时拿不到输出参数

异常处理汇总-后端系列 http://www.cnblogs.com/dunitian/p/4523006.html 后期会在博客首发更新:http://dnt...

3357
来自专栏狂码一生

用MFC写一个聊天室程序 - 学习笔记

下面的服务器端与客户端的程序与步骤是我在学习MFC网络编程写一个聊天室程序所写的程序,在这里作一个笔记,也希望能帮到一部分刚刚学习的朋友,一起共勉,一起努力历进...

76214
来自专栏绿巨人专栏

Migrating to WebSphere 9

3476
来自专栏蓝天

HBase Thrift2 CPU过高问题分析

外界连接9090端口均超时,但telnet端口总是成功。使用top命令观察,发现单个线程的CPU最高达99.99%,但并不总是99.9%,而是在波动。当迁走...

742
来自专栏数据分析

使用Visual Studio 2010 一步一步创建Powershell Module 和 Cmdlet

之前写了一个C# 调用PowerShell方法, 那么怎么反过来操作呢,也就是怎么样用C#写一个powershell命令呢? 现在就用C#写一个超级简单的Mod...

3889
来自专栏linux驱动个人学习

高通Audio中ASOC的codec驱动(二)

继上一篇文章:高通Audio中ASOC的machine驱动(一) ASOC的出现是为了让codec独立于CPU,减少和CPU之间的耦合,这样同一个codec驱动...

6985

扫码关注云+社区