【问题标题】:Local storage setItem override - Illegal invocation error本地存储 setItem 覆盖 - 非法调用错误
【发布时间】:2021-10-26 13:20:17
【问题描述】:

我正在尝试覆盖 localStorage.setItem 方法以添加禁用本地存储选项以进行调试。但是我在使用该方法时总是遇到非法调用错误。

let originalFunction = window.Storage.prototype.setItem;
window.Storage.prototype.setItem = (keyName, keyValue) => {
    console.log("Override worked ! ")
    let currentState = localStorage.getItem("disableStorage");
    if (currentState === null || keyName === "disableStorage") {
        originalFunction(keyName, keyValue);
    }
    return;
}
localStorage.setItem("test", "blah");

我做了一个jsfiddle给你测试一下,和sn-p代码一样,本地存储是不行的。

我试过有无窗口,两种情况都行不通。

我们无法在 jsfiddle 中正确看到它,但错误出现在以下行:originalFunction(keyName, keyValue)

我已经完成了与this question 对应的覆盖。但这似乎不起作用。

【问题讨论】:

    标签: javascript


    【解决方案1】:

    我找到了问题。
    显然,我们需要使用.apply来调用原始方法。

    我已经更新了小提琴,所以它现在是工作版本。这是一个用于连贯性的 sn-ps:

    let originalFunction = window.Storage.prototype.setItem;
    window.Storage.prototype.setItem = function(keyName, keyValue) {
        console.log("Override worked ! ")
        let currentState = localStorage.getItem("disableStorage");
        if (currentState === null || keyName === "disableStorage") {
            originalFunction.apply(this, arguments);
        }
        return;
    }
    localStorage.setItem("test", "blah");

    sn-p 不起作用,但代码可以。

    我找到了合成器 here

    【讨论】:

    • 请注意,您已经覆盖了 Storage 方法,但将其与 localStorage 实例耦合。如果您也想覆盖sessionStorage 行为,那么您应该更改为this.getItem。如果你只想影响localStorage,那么你应该覆盖localStorage.setItem
    猜你喜欢
    • 1970-01-01
    • 2020-07-16
    • 1970-01-01
    • 2017-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-23
    • 2023-02-14
    相关资源
    最近更新 更多