内容安全策略';不安全评估';:如何避免在javascript jquery.timer.js中使用eval()?

内容安全策略';不安全评估';:如何避免在javascript jquery.timer.js中使用eval()?,javascript,jquery,jquery-plugins,eval,Javascript,Jquery,Jquery Plugins,Eval,如何避免在以下jquery.timer.js的第10行中使用eval 取消评估的原因是因为我的站点正在迁移到CSP,现在需要“不安全评估” 对于这个用例,可能有eval()的替代方案 我有点卡住了。非常感谢您的帮助 ; (function($) { $.timer = function(func, time, autostart) { this.set = function(func, time, autostart) { this.init =

如何避免在以下jquery.timer.js的第10行中使用eval

取消评估的原因是因为我的站点正在迁移到CSP,现在需要“不安全评估”

对于这个用例,可能有eval()的替代方案

我有点卡住了。非常感谢您的帮助

;
(function($) {
    $.timer = function(func, time, autostart) {
        this.set = function(func, time, autostart) {
            this.init = true;
            if (typeof func == 'object') {
                var paramList = ['autostart', 'time'];
                for (var arg in paramList) {
                    if (func[paramList[arg]] != undefined) {
                        eval(paramList[arg] + " = func[paramList[arg]]");
                    }
                };
                func = func.action;
            }
            if (typeof func == 'function') {
                this.action = func;
            }
            if (!isNaN(time)) {
                this.intervalTime = time;
            }
            if (autostart && !this.isActive) {
                this.isActive = true;
                this.setTimer();
            }
            return this;
        };

        (...)
        this.setTimer = function(time) {
            var timer = this;
            if (typeof this.action != 'function') {
                return;
            }
            if (isNaN(time)) {
                time = this.intervalTime;
            }
            this.remaining = time;
            this.last = new Date();
            this.clearTimer();
            this.timeoutObject = window.setTimeout(function() {
                timer.go();
            }, time);
        };
        this.go = function() {
            if (this.isActive) {
                this.action();
                this.setTimer();
            }
        };
        if (this.init) {
            return new $.timer(func, time, autostart);
        } else {
            this.set(func, time, autostart);
            return this;
        }
    };
})(jQuery);

虽然如果
paramList
很大,则很麻烦且容易出错,但是如果
paramList
不是动态创建的,则可以手动设置变量值

对于
自动启动
时间
,您将使用以下命令:

if(func['autostart'] != undefined) {
    autostart = func['autostart'];
}

if(func['time'] != undefined) {
    time = func['time'];
}
请注意,此解决方案完全依赖于您提前知道
paramList
的内容这一事实

在您提供的代码的上下文中,您将修改
此项。设置如下:

this.set = function(func, time, autostart) {
    this.init = true;
    if (typeof func == 'object') {

        /* Modified Code */
        if(func['autostart'] != undefined) {
            autostart = func['autostart'];
        }

        if(func['time'] != undefined) {
            time = func['time'];
        }
        /* End Modified Code */

        func = func.action;
    }
    if (typeof func == 'function') {
        this.action = func;
    }
    if (!isNaN(time)) {
        this.intervalTime = time;
    }
    if (autostart && !this.isActive) {
        this.isActive = true;
        this.setTimer();
    }
    return this;
};

我通读了一遍,但仍在阅读中。你能链接到原始插件文档吗?坦率地说,我建议完全找另一个库,因为任何使用
eval()
的东西都会显示一个标记,与创建它的开发人员相对应。该站点包含一个没有明确引用的版本。我在web上搜索并找到了与我的站点对应的版本:。我现在意识到这个脚本已经过时了。github上较新的版本没有eval()。我将测试这个版本,看看它是否适合我。谢谢