簡體   English   中英

攔截localStorage.getItem()

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM