Hybrid App里H5和原生能共享LocalStorage吗?

怡涵🍀 阅读 3

我们App是用原生(Android)内嵌WebView加载H5页面的,现在想在原生和H5之间共享一些配置数据。我试过在H5里用localStorage.setItem('token', 'xxx')存数据,但在原生Java代码里读不到,是不是根本不能共享?还是我哪里没配对?

查了文档说WebView默认有自己独立的存储空间,那有没有办法让它们共用同一个LocalStorage?比如通过设置WebView的Storage路径之类的?

我来解答 赞 0 收藏
二维码
手机扫码查看
1 条解答
书生シ雯婷
WebView和原生确实不能直接共享LocalStorage,这是沙盒隔离机制决定的。不过有几种靠谱的解决方案:

最简单高效的是用WebView的JavaScriptInterface,我给你个实现方案:

1. 原生端先定义接口类:
public class JSBridge {
private SharedPreferences prefs;

public JSBridge(Context context) {
prefs = context.getSharedPreferences("shared_data", Context.MODE_PRIVATE);
}

@JavascriptInterface
public void setData(String key, String value) {
prefs.edit().putString(key, value).apply();
}

@JavascriptInterface
public String getData(String key) {
return prefs.getString(key, "");
}
}


2. WebView设置:
webView.getSettings().setJavaScriptEnabled(true);
webView.addJavascriptInterface(new JSBridge(this), "NativeBridge");


3. H5端调用:
// 存数据
window.NativeBridge.setData('token', 'xxx');

// 取数据
const token = window.NativeBridge.getData('token');


优化一下的话,可以再加个版本校验和加密传输,防止安全问题。这样性能比LocalStorage好,因为SharedPreferences是直接走原生存储。

还有个方案是用WebStorage.setDomStorageEnabled配合setDatabasePath,但实测下来坑比较多,不推荐。
点赞
2026-03-08 15:30