1. 程式人生 > >建立資料共享介面——簡化框架之間相互傳值

建立資料共享介面——簡化框架之間相互傳值

很多框架存在父子關係,操作起來十分麻煩,很多同學經常出現這樣悲催的程式碼:

1 window.parent.document.getElementById("main")
2 .contentWindow.document.getElementById('input').value =
3 document.getElementById('myIframe')
4 .contentWindow.document.getElementById('s0').value;

其實這個問題可以被大大的簡化,框架應用中有一個固定不變的視窗叫window.top,如果我們把資料快取到這個頁面,其下所有框架都可以獲取到,無論 子頁面如何變幻。不需要採用Cookie,也不需要採用什麼HTML5本地資料庫策略,你只需要每個頁面引用一個js檔案,內容如下:

 1 var share = {
2
3 /**
4 * 跨框架資料共享介面
5 * @param {String} 儲存的資料名
6 * @param {Any} 將要儲存的任意資料(無此項則返回被查詢的資料)
7 */
8 data: function (name, value) {
9 var top = window.top,
10 cache = top['_CACHE'] || {};
11 top['_CACHE'] = cache;
12
13 return
value !== undefined ? cache[name] = value : cache[name];
14 },
15
16 /**
17 * 資料共享刪除介面
18 * @param {String} 刪除的資料名
19 */
20 removeData: function (name) {
21 var cache = window.top['_CACHE'];
22 if (cache && cache[name]) delete cache[name];
23 }
24
25 };

這個寥寥數行的方法可以共享任意型別的資料供各個框架頁面讀取,它與頁面名稱、層級毫無關係,就算哪天框架頁面層級被修改,你也完全不用擔心,它可正常工作。

例如,如我們可以在A頁面存入共享資料:

share.data(‘myblog’, ‘http://www.planeart.cn’);
share.data(‘editTitle’, function (val) {
document.title = val;
});

然後某框架頁面任意取A頁面的資料

alert(‘我的部落格地址是: ‘ + share.data(‘myblog’);
var editTitle = share.data(‘editTitle’);
editTitle(‘我已經獲取到了資料’);