H5本地存储LocalStorage缺点

本文探讨了localStorage的大小限制、在隐私模式下的不可读性、其读写机制可能导致的性能问题及为何不适合完全替代URL传参的原因。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


localStorage大小限制在500万字符左右,各个浏览器不一致
localStorage在隐私模式下不可读取
localStorage本质是在读写文件,数据多的话会比较卡(firefox会一次性将数据导入内存,想想就觉得吓人啊)
localStorage不能被爬虫爬取,不要用它完全取代URL传参

### 实现购物APP订单参数传递至H5页面 为了实现从购物应用程序将订单参数传递到H5页面,在实际项目中通常有几种方法可以考虑: #### 方法一:URL 参数传递 一种简单有效的方式是通过 URL 查询字符串的形式把必要的订单信息作为参数附加在 H5 页面链接后面。这种方式适用于需要快速分享或跳转场景。 ```javascript // 构建带有订单ID和其他必要信息的URL const orderId = '12345'; const orderAmount = '99.00'; let h5Url = `https://example.com/order?orderId=${encodeURIComponent(orderId)}&amount=${encodeURIComponent(orderAmount)}`; window.location.href = h5Url; ``` 这种方法的优点在于易于理解和实施,缺点则是暴露了部分敏感信息于浏览器地址栏中[^1]。 #### 方法二:Local Storage 或 Session Storage 如果是在同一个域下,则可以通过 LocalStorage 或者 sessionStorage 来存储临时性的订单数据,并让目标网页读取这些数据完成初始化工作。 ```javascript // APP端保存订单详情到本地缓存 localStorage.setItem('orderInfo', JSON.stringify({ id: '67890', total: 150 })); // H5页面加载时尝试恢复之前保存的数据 document.addEventListener('DOMContentLoaded', function() { let storedOrder = localStorage.getItem('orderInfo'); if(storedOrder){ console.log(JSON.parse(storedOrder)); } }); ``` 此方式适合用于跨页面间共享少量非敏感数据的情况[^2]。 #### 方法三:WebView JavaScript Bridge 对于更复杂的需求,特别是涉及到安全性较高的场合,推荐使用 WebView 的 JSBridge 技术来进行双向通讯。这允许移动应用与嵌入其中的 Web 应用程序之间安全地交换消息和服务调用。 ```objc #import "WebViewJavascriptBridge.h" // iOS 客户端设置桥梁并监听来自Web的消息 - (void)viewDidLoad { [super viewDidLoad]; self.webView.delegate = self; _bridge = [WebViewJavascriptBridge bridgeForWebView:self.webView handler:^(id data, WVJBResponseCallback responseCallback) { NSLog(@"Received message from webview: %@",data); // 处理接收到的信息... NSString *responseString = @"Handled"; responseCallback(responseString); }]; } // 向web发送订单对象 [_bridge send:@{@"type":@"submitOrder",@"content":@{...}}]; // 在HTML文件里定义相应的接收函数 <script type="text/javascript"> function setupWebViewJavascriptBridge(callback) { if(window.WebViewJavascriptBridge) { return callback(WebViewJavascriptBridge); } document.addEventListener('WebViewJavascriptBridgeReady' , function() { callback(WebViewJavascriptBridge); }, false); } setupWebViewJavascriptBridge(function(bridge) { /* 初始化完成后可注册回调 */ bridge.init(function(message,responseCallback){/* ... */}); // 接收到来自Native App的消息后执行相应动作 bridge.registerHandler('submitOrder', function(data, responseCallback) { alert("Got Order Data:" + JSON.stringify(data)); // 进一步处理订单逻辑... }); }); </script> ``` 这种机制提供了更高的灵活性和控制力,同时也更好地保护了传输过程中的隐私性和安全性[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值