[英]Intercept localStorage.getItem()
有沒有辦法攔截對localStorage的調用? 也許存在一些處理程序?
如果我在代碼腳本中有某個地方,例如localStorage.getItem(),則需要知道該存儲將要獲取某項,並且我想防止這種情況發生,並做我需要做的事情。
我想為移動Web開發人員編寫一個框架。 我希望他們以通常的方式使用localstorage調用。 我的框架將攔截此調用,並將數據不放置到W3C存儲中,而是放置到本機設備存儲中。 那可能嗎? 謝謝。
您可以使用原型。 嘗試這樣的事情:
Storage.prototype._setItem = Storage.prototype.setItem;
Storage.prototype.setItem = function (key, value)
{
alert("works");
}
localStorage.setItem("A", "A");
如果您需要進一步澄清,請隨時提出。
您可以用自己的變量替換整個localStorage變量,盡管您可能無法復制API的每個部分...
var localStorage = (function () {
return {
setItem: function (key, value) {
alert(key);
}
};
}());
localStorage.setItem('a', 'b');
您將需要實現相同的接口,以使您的代碼無形地插入其中,但是此帶有setItem
示例向您展示了所有操作。
如果將舊的localStorage彈出到變量中以保留它,則仍然可以調用它。
我沒有執行要測試的條件來決定是否將其存儲在其他位置。
或者,當然,您可以通過給它一個不同的名稱來稍微更改它,使其成為一個庫,而不是一個攔截器。這使您可以實現供人們遵循的固定API。
var storageLibrary = (function () {
return {
setItem: function (key, value) {
alert(key);
if (true) {
localStorage.setItem(key, value);
} else {
// Save it somewhere else
}
}
};
}());
storageLibrary.setItem('a', 'b');
您可以通過以下窗口中觸發的存儲事件來跟蹤對localStorage和sessionStorage的更改:
該事件在同一來源的所有打開的標簽或頁面上觸發。
function storageHandler(e){
var info={
key:e.key, oldV:e.oldValue, newV:e.newValue, url:e.url || e.uri
};
//do something with info
}
window.addEventListener('storage', storageHandler, false);
特殊的存儲事件屬性:
key- the named key that was added, removed, or modified
oldValue- the previous value(now overwritten), or null if a new item was added
newValue-the new value, or null if an item was removed
url or uri- the page which called a method that triggered this change
您可能需要在#9以下測試IE(attachEvent和全局事件處理)和localStorage支持。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.