内容安全策略';不安全评估';:如何避免在javascript jquery.timer.js中使用eval()?
如何避免在以下jquery.timer.js的第10行中使用eval 取消评估的原因是因为我的站点正在迁移到CSP,现在需要“不安全评估” 对于这个用例,可能有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 =
;
(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()。我将测试这个版本,看看它是否适合我。谢谢