案例地址:http://yotcap.top/htm/storage.html

在同一页面添加监听事件监听 storage 并不起作用,所以有以下两种方法用来监听。

  1. 同源页面添加监听事件
  2. 同页面重写 storage 方法

1. 监听同源页面中 storage 的变动

storage.html(监听变动页面)

<!doctype html>
<html>
<head><meta charset="utf-8" ><title>test storage</title><meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0">
</head>
<body><input id="tInput" type="text" /><button onclick="addItem()">add</button><button onclick="getItem()">get</button><br><p><a href="storageChange.html" target="_blank" title="修改storage">同源修改storage</a></p><p id="changeResult"></p><script>window.addEventListener('storage', function (e) {let p = document.getElementById('changeResult');p.innerHTML = `oldValue: ${e.oldValue}<br>newValue: ${e.newValue}<br>from: ${e.url}`;}, false);function addItem () {let value = document.getElementById('tInput').value;localStorage[value] = value;}function getItem () {let v = document.getElementById('tInput').value;console.log(localStorage[v], 'getItem');}function changeItem () {let k = document.getElementById('changeInputKey').value;let v = document.getElementById('changeInputValue').value;let p = document.getElementById('changeResult');p.innerHTML = `oldValue: ${localStorage[k]}<br>newValue: ${v}<br>from: this's page`;localStorage.setItem(k, v);}</script>
</body>
</html>

storageChange.html(修改页面)

<!doctype html>
<html>
<head><meta charset="utf-8" ><title>changeStorage</title><meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0">
</head>
<body><span>key:</span><input id="changeInputKey" type="text" /><span>value:</span><input id="changeInputValue" type="text" /><button onclick="changeItem()">change</button><script>function changeItem () {let k = document.getElementById('changeInputKey').value;let v = document.getElementById('changeInputValue').value;localStorage[k] = v;}</script>
</body>
</html>

2. 监听当前页面 storage 变动

<!doctype html>
<html>
<head><meta charset="utf-8" ><title>test storage</title><meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0">
</head>
<body><input id="tInput" type="text" /><button onclick="addItem()">add</button><button onclick="getItem()">get</button><br><p>页面修改 storage</p><span>修改的key</span><input id="changeInputKey" type="text" /><span>修改的value</span><input id="changeInputValue" type="text" /><button onclick="changeItem()">change</button><br><p id="changeResult"></p><script>let originStorage = localStorage;let sto = {setItem: function (key, value) {let setItemEvent = new Event('setItemEvent');setItemEvent.key = key;window.dispatchEvent(setItemEvent);originStorage.setItem(key, value);},getItem: function (key) {return originStorage.getItem(key);}}window.addEventListener('setItemEvent', function (e) {// console.log(e);});window.addEventListener('storage', function (e) {let p = document.getElementById('changeResult');p.innerHTML = `oldValue: ${e.oldValue}<br>newValue: ${e.newValue}<br>from: ${e.url}`;}, false);function addItem () {let value = document.getElementById('tInput').value;sto.setItem(value, value);}function getItem () {let v = document.getElementById('tInput').value;console.log(sto.getItem(v), 'getItem');}function changeItem () {let k = document.getElementById('changeInputKey').value;let v = document.getElementById('changeInputValue').value;let p = document.getElementById('changeResult');// localStorage.setItem(k, v);p.innerHTML = `oldValue: ${sto.getItem(k)}<br>newValue: ${v}<br>from: this's page`;sto.setItem(k, v);}</script>
</body>
</html>

JS 监听 storage相关推荐

  1. js 监听 安卓事件_百行代码实现js事件监听实现跨页面数据传输

    百行代码实现js事件监听实现跨页面数据传输 使用场景 类似消息队列的使用场景,支持同页面和跨页面通信,发送消息和接收消息 技术原理 跨页面通信: 基于事件监听,通过监听 storage事件监听回调机制 ...

  2. js监听audio播放完毕

    js监听audio播放完毕 <!DOCTYPE html> <html> <head><meta charset="UTF-8">& ...

  3. Vue.js 监听属性简单实例

    Vue.js 监听属性 watch,可以通过 watch 来响应数据的变化. watch:用来监听每一个属性的变化     watch这个对象里面都是函数,函数的名称是data中的属性名称,watch ...

  4. vue 组件属性监听_Vue.js 监听属性

    # Vue.js 监听属性 本章节,我们将为大家介绍 Vue.js 监听属性 watch,我们可以通过 watch 来响应数据的变化: ~~~ Vue 测试实例 - 菜鸟教程(runoob.com) ...

  5. 使用Node.JS监听文件夹变化

    使用Node.JS监听文件夹改变有许多应用场合,比如: 构建自动编绎工具 当源文件改变时,自动运行build过程,比如当你写CoffeeScript文件或SASS CSS文件时,保存之后可即时生成对应 ...

  6. html5中检测网络状态的方法,前端js监听浏览器网络变化

    首先,为什么要让前端判断用户的网络状态呢--为了更好的用户体验. 其次,前端能否判断网络状态?有哪些方法? 1,可以做到渐进式判断,不能做到绝对准确. 2,使用的是navigator.onLine或n ...

  7. js监听iframe是否加载完毕

    js监听iframe是否加载完毕 代码片. //初始化加载var a = document.getElementById(iframe的id);var iframeLoad = function () ...

  8. js监听浏览器tab页面变化

    js监听浏览器tab页面变化 引言 今天写到一个需求,当用户离开当前页面的时候,需要关闭页面的一个功能,查找资料发现了这个指令,个人觉得很有用,记录下来... 直接上代码 mounted:(){thi ...

  9. js监听鼠标拖动事件(按住左键拖动触发,松开左键取消)

    此段代码,实现了左键点击id元素内区域后,拖动鼠标到边缘区域滚动条(内部class元素的滚动条)自动滚动,松开鼠标后取消事件 业务需要记录一下 $(function () {var div=docum ...

最新文章

  1. linuxroot密码正确无法登录_敦煌网忘记登录密码怎么办?敦煌网登录密码找回办法...
  2. 生产者/消费者问题的多种Java实现方式
  3. golang经典书籍--Go语言实战
  4. stl list(转)
  5. 笔记-中项案例题-2020年下-风险管理
  6. 2017帝都租房攻略:昌平通州租金涨幅高达25%
  7. json C库源码地址
  8. 凑钱系统C语言,C语言课程设计报告书凑钱程序.doc
  9. 信息学奥赛一本通 2057:【例3.9 】星期几
  10. [leetcode] Power of Two 判断一个数是否是2的平方
  11. HDU2566 统计硬币【暴力】
  12. 老男孩linux高级架构 百度云盘下载
  13. Cornerstone详细操作
  14. vue3格式校验邮箱和手机号
  15. 皮尔森相关系数的python实现_深入理解皮尔逊相关系数python代码
  16. python tkinter界面可视化工具
  17. 2019.1.21【NOIP提高组】模拟B组 JZOJ 4208 线段树什么的最讨厌了
  18. R语言符号秩检验及其应用
  19. 计算某个字符出现的次数
  20. 对软件架构设计的一些总结和理解

热门文章

  1. 一个大学生屌丝心中的seo梦
  2. 爬取雪球网股票信息(一)
  3. js选中html的数字设置倒计时,JS实现的网页倒计时数字时钟效果
  4. 【Python机器学习基础教程】(三)
  5. MATLAB提示错误使用network,优化双隐藏神经网络出现错误使用 network/subsasgnne...
  6. 前端面试宝典 html css js ajax es6
  7. 计算机10进制化2进制在线,二进制转十进制
  8. 病毒木马查杀实战第014篇:U盘病毒之手动查杀
  9. Python实现视频转 gif 动图
  10. C语言用数组编程矩阵,二维数组—矩阵求和(C语言)