有什麼辦法來攔截調用localStorage?或者也許有一些處理程序存在?攔截localStorage.getItem()
如果我有像localStorage.getItem代碼腳本(),我需要知道存儲會得到一些項目,我想避免這種情況,並做一些我需要的地方。
我想爲移動web開發人員編寫一個框架。我希望他們以通常的方式使用localstorage調用。我的框架將攔截這些調用,並將數據放到W3C存儲中,而不是本地設備存儲。那可能嗎?謝謝。
有什麼辦法來攔截調用localStorage?或者也許有一些處理程序存在?攔截localStorage.getItem()
如果我有像localStorage.getItem代碼腳本(),我需要知道存儲會得到一些項目,我想避免這種情況,並做一些我需要的地方。
我想爲移動web開發人員編寫一個框架。我希望他們以通常的方式使用localstorage調用。我的框架將攔截這些調用,並將數據放到W3C存儲中,而不是本地設備存儲。那可能嗎?謝謝。
您可以使用原型。嘗試類似的東西:
Storage.prototype._setItem = Storage.prototype.setItem;
Storage.prototype.setItem = function (key, value)
{
alert("works");
}
localStorage.setItem("A", "A");
如果你需要進一步澄清,隨便問。
太棒了。這就是我一直在尋找...謝謝! – Jim
你可以用自己的需要更換整個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(的attachEvent和全球事件處理)和localStorage的支持。
'localStorage.getItem = function(){return「no!」 }'。 –
假設這不是一個安全功能的註定嘗試,我們需要更多地瞭解用例來設計相關答案。 –
@dystroy'localStorage.itemName'仍然可以工作... – tborychowski