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 条评论
登录 后参与评论

相关文章

来自专栏james大数据架构

MVC前台Post/Get异步获得数据时参数的取值问题

Post方法,返回text,后台获得Data View         $.ajax({ type: "POST", ...

2425
来自专栏龙首琴剑庐

原 微服务Spring Cloud Eur

1633
来自专栏cmazxiaoma的架构师之路

FastDFS蛋疼的集群和负载均衡(十七)之解决LVS+Keepalived遇到的问题

1695
来自专栏张善友的专栏

使用API Key验证WCF Data Service

Ron Jacobs 有篇文章介绍如何在WCF Rest Service中使用API Key验证:http://blogs.msdn.com/b/rjacobs...

1998
来自专栏Android开发经验

一步一步实现Android低功耗蓝牙(BLE)基本开发

项目需要接入两个低功耗蓝牙设备(BLE),并且与之交互(读/写)数据,所以看了下官方对于这块儿的介绍,总结了一下BLE开发中一些需要注意的地方以及基本流程。

754
来自专栏华仔的技术笔记

一种eos3.0升级到eos4.x的的方法

1546
来自专栏Winter漫聊技术

Retrofit进阶

什么是Retrofit? 这类文章太多了,这里就不多做介绍,贴个官方链接: http://square.github.io/retrofit/

762
来自专栏吴伟祥

Linux命令缩写英文对照记忆(〇) 转

662
来自专栏一“技”之长

从AFNetworking源码分析到应用全解 原

    AFNetworking是iOS/OS开发中常用的一个第三方网络库,可以说它是目前最流行的网络库,但其代码结构其实并不复杂,也可以说非常简洁优美。在AF...

1032
来自专栏潇涧技术专栏

Head First Android Testing 2

Instrumentation Tests又叫Device or Emulator Tests,即运行在设备或者模拟器上的测试。使用AndroidJunitRu...

562

扫码关注云+社区