gpt4 book ai didi

javascript - 内容安全策略 'unsafe-eval' : How to avoid using eval() in javascript jquery. timer.js?

转载 作者:行者123 更新时间:2023-12-03 02:59:53 26 4
gpt4 key购买 nike

如何避免在以下 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:

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;
};

关于javascript - 内容安全策略 'unsafe-eval' : How to avoid using eval() in javascript jquery. timer.js?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47459381/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com