多個 JSP 頁面 (如 A.jsp 開啟 B.jsp) 需共享同一 JavaScript 物件。全域變數、靜態變數在頁面跳轉時失效,Cookie 不安全且容量限制。
var share = {
// 跨框架資料共享介面
data: function(name, value) {
var top = window.top,
cache = top['_CACHE'] || {};
top['_CACHE'] = cache;
return value !== undefined ? cache[name] = value : cache[name];
},
// 資料共享刪除介面
removeData: function(name) {
var cache = window.top['_CACHE'];
if (cache && cache[name]) delete cache[name];
}
};
var chatFrdList = new Object(); // 共享物件
var frdUserId = "user123"; // 好友 ID
// 開啟新視窗/分頁前執行
window.top['_CACHE'] = chatFrdList;
window.top['_CACHE'][frdUserId] = frdUserId;
// 開啟 B.jsp
window.open('B.jsp');
// 關閉聊天視窗時從共享物件移除
var e = document.getElementsByName("chatWindow");
var keyId = e[0].id;
delete window.top['_CACHE'][keyId];
可隨時存取 window.top['_CACHE'] 進行增刪改查,實現多頁面物件共享。
window.top 參考最頂層視窗物件window.top_CACHE 掛載於 top 物件,生命週期隨瀏覽器分頁關閉而結束| 限制 | 說明 |
|---|---|
| 同源策略 | 僅限同協定、域名、埠號下的頁面 |
| 分頁關閉 | 關閉頂層分頁 _CACHE 即銷毀 |
| 記憶體洩漏 | 需及時 delete 不用資料,避免長期佔用 |
| 安全性 | 同域名下任何頁面可存取,敏感資料勿存 |