【HTML5】Web Storage 事件
傳送門:JavaScript 教程 / 瀏覽器模型 / Storage 介面
1. 注意事項
該事件並不會在當前改動的頁面觸發,而是在同源且開啟的頁面才會被觸發
2. 示例
- a.html(http://aaa.com/a.html)【操作】
<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title></title>
<style>
.wrap {padding: 10px; border: 1px solid #ccc;}
</style>
</head>
<body>
<div class="wrap set">
<input type="text" placeholder="key">
<input type="text" placeholder="value">
<input type="button" value="增改" onclick="setItem()">
</div>
<div class="wrap del" style="margin-top: -1px;">
<input type="text" placeholder="key">
<input type="button" value="刪除" onclick="delItem()">
</div>
<script>
// 設定
function setItem() {
var k = document.querySelector('.set input[placeholder="key"]').value;
var v = document.querySelector('.set input[placeholder="value"]').value;
localStorage.setItem(k, v);
}
// 移除
function delItem() {
var k = document.querySelector('.del input[placeholder="key"]').value;
localStorage.removeItem(k);
}
</script>
</body>
</html>
- b.html(http://aaa.com/b.html)【監聽】
<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title></title>
</head>
<body>
<div class="msg"></div>
<script>
var msg = document.querySelector('.msg');
var prep = localStorage.length; // 初始值,記錄著變化前的值
// 監聽函式
function onStorageChange(e) {
// e.key - 被操作的鍵名
// e.oldValue - 被操作鍵的原值
// e.newValue - 被操作鍵的新值
// e.storageArea - 當前儲存區域
var type = '';
if (e.storageArea.length > prep) {
type = '增加鍵值對';
prep = e.storageArea.length;
} else if (e.storageArea.length < prep) {
type = '移除鍵值對';
prep = e.storageArea.length;
} else {
type = '修改鍵值對';
prep = e.storageArea.length;
}
var html = '<ul><li>當前操作為:' + type + '</li>'
+ '<li>操作的鍵名為:' + e.key + '</li>'
+ '<li>該鍵的原值為:' + e.oldValue + '</li>'
+ '<li>該值的新值為:' + e.newValue + '</li>'
+ '<li>當前儲存區內有:' + e.storageArea.length + ' 對鍵值對</li>'
+ '<li>該操作來自:' + e.url + '</li></ul>';
msg.innerHTML = html;
}
window.addEventListener('storage', onStorageChange, false);
</script>
</body>
</html>
3. 藉助 iframe 父子通訊【非跨域】
- a.html(http://aaa.com/a.html)【操作、接收】
<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title></title>
<style>
.wrap {padding: 10px; border: 1px solid #ccc;}
</style>
</head>
<body>
<iframe src="http://aaa.com/b.html" style="display: none;"></iframe>
<div class="wrap set">
<input type="text" placeholder="key">
<input type="text" placeholder="value">
<input type="button" value="增改" onclick="setItem()">
</div>
<div class="wrap del" style="margin-top: -1px;">
<input type="text" placeholder="key">
<input type="button" value="刪除" onclick="delItem()">
</div>
<script>
// 設定
function setItem() {
var k = document.querySelector('.set input[placeholder="key"]').value;
var v = document.querySelector('.set input[placeholder="value"]').value;
localStorage.setItem(k, v);
}
// 移除
function delItem() {
var k = document.querySelector('.del input[placeholder="key"]').value;
localStorage.removeItem(k);
}
</script>
</body>
</html>
- b.html(http://aaa.com/b.html)【監聽】
<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title></title>
</head>
<body>
<script>
var msg = document.querySelector('.msg');
var prep = localStorage.length; // 初始值,記錄著變化前的值
// 監聽函式
function onStorageChange(e) {
// e.key - 被操作的鍵名
// e.oldValue - 被操作鍵的原值
// e.newValue - 被操作鍵的新值
// e.storageArea - 當前儲存區域
var type = '';
if (e.storageArea.length > prep) {
type = '增加鍵值對';
prep = e.storageArea.length;
} else if (e.storageArea.length < prep) {
type = '移除鍵值對';
prep = e.storageArea.length;
} else {
type = '修改鍵值對';
prep = e.storageArea.length;
}
var msg = '當前操作為:' + type
+ '\n操作的鍵名為:' + e.key
+ '\n該鍵的原值為:' + e.oldValue
+ '\n該值的新值為:' + e.newValue
+ '\n當前儲存區內有:' + e.storageArea.length + ' 對鍵值對'
+ '\n該操作來自:' + e.url;
alert(msg);
}
window.addEventListener('storage', onStorageChange,false);
</script>
</body>
</html>
相關文章
- 移動Web——localStorage,sessionStorage,Storage事件監聽WebSession事件
- HTML5學習之Web Storage基礎知識HTMLWeb
- storage事件中的坑,storage.setItem()無法觸發storage事件事件
- JavaScript storage 事件JavaScript事件
- Web Storage概述Web
- cookie、session、web storageCookieSessionWeb
- h5 storage事件監聽H5事件
- Web儲存(Web Storage)擴充套件EStorageWeb套件
- 關於Cookie、session和Web StorageCookieSessionWeb
- 好程式設計師web前端分享HTML5 video事件應用示例程式設計師Web前端HTMLIDE事件
- Web Storage API的介紹和使用WebAPI
- 手機端html5觸屏事件(touch事件)HTML事件
- HTML5與Web前端HTMLWeb前端
- HTML5 Web Workers簡介HTMLWeb
- PWA(Progressive Web App)入門系列:Cache Storage & CacheWebAPP
- 好程式設計師前端教程之HTML5中的storage 如何使用?程式設計師前端HTML
- 初識HTML5 Web Audio APIHTMLWebAPI
- web前端知識梳理——HTML5(一)Web前端HTML
- HTML5是Web中核心語言HTMLWeb
- HTML5觸控事件(touchstart、touchmove和touchend) (轉)HTML事件
- 聊聊HTML5中的Web Notification桌面通知HTMLWeb
- HTML5 Web SQL 資料庫簡介HTMLWebSQL資料庫
- Azure Storage 系列(二) .NET Core Web 專案中操作 Blob 儲存Web
- 前端基礎 — Web事件總結前端Web事件
- Azure Storage 系列(六)使用Azure Queue Storage
- Azure Storage 系列(七)使用Azure File Storage
- 基於HTML5的移動Web應用HTMLWeb
- 一篇文章圖文並茂地帶你輕鬆學會 HTML5 storageHTML
- Local Storage
- 瀏覽器有幾種儲存機制?講一講:Storage for the Web瀏覽器Web
- ASP.NET Web Forms – 事件簡介ASP.NETWebORM事件
- 分享web前端裡驚豔的HTML5的demoWeb前端HTML
- Azure Storage 系列(四)在.Net 上使用Table Storage
- HTML5和Web前端有什麼區別?具備HTML5技能的人薪資多少?HTMLWeb前端
- Password Storage - UserDetailsAI
- HTML5 Web儲存 頁面間進行傳值HTMLWeb
- HTML5將重塑Web世界?,網際網路營銷HTMLWeb
- 學習 HT for Web 中的互動事件Web事件