我正在处理一个NodeJS项目,我正在使用csp
(内容安全策略)。
我正在使用一个外部插件fullcalendar
,它被csp阻止,会出现以下错误:
错误:对Function()的调用被CSP阻止
我使用script-src'self''unsafe-eval';
重写它,但在Firefox中不起作用。在其他浏览器中,它工作得很好。
我在这个问题上被困了4小时。
如果能得到解决办法将会很有帮助。
我在CSP限制中使用以下格式。
X-content-security-policy:default-src*;script-src“self”“unsafe-eval”;object-src“none”;style-src'self''unsafe-inline img-src*;options eval-script;
x-webkit-csp:default-src*;script-src“self”“unsafe-eval”;object-src“none”;style-src“self”“unsafe-内联img-src*;
content-security-policy:default-src*;script-src“self”“unsafe-eval”;object-src“none”;style-src“self”“unsafe-内联img-src*;
我在网上找到的最简单的方法。在index.html文件中嵌入元标记:
<meta http-equiv="Content-Security-Policy"
content="
default-src *
style-src * 'unsafe-inline'
script-src *
img-src * data:
'unsafe-eval'
" />
这将允许从其他源或平台呈现和使用图元文件,如图像、JavaScript、CSS。
假设this.disp
包含要求值的表达式。还有disp:document.getElementById(“id_of_text_input_field”)
。为。this.disp.value=123/45*67+8-9%10
。它还会关心否定
否。为。-123+3
=-120
。耶!
compute: function compute() {
var sign = 1;
if (this.disp.value[0] == '-') sign = -1;
this.disp.value = this.calculate(this.disp.value,sign);
this.update(this.disp.value.length);
return this.disp.value;
},
calculate: function calculate(input,sign){
var opr_list = { add : '+'
, sub : '-'
, div : '/'
, mlt : '*'
, mod : '%'
};
opr_list.opr = [[ [opr_list.mlt] , [opr_list.div] , [opr_list.mod]],
[ [opr_list.add] , [opr_list.sub] ]];
input = input.replace(/[^0-9%^*\/()\-+.]/g,'');
var output,n;
for(var i=0, n=opr_list.opr.length; i<n; i++ ){
var re = new RegExp('(\\d+\\.?\\d*)([\\'+opr_list.opr[i].join('\\')+'])(\\d+\\.?\\d*)');
re.lastIndex = 0;
while( re.test(input) ){
output = this.compute_result(opr_list,sign*RegExp.$1,RegExp.$2,RegExp.$3);
if (isNaN(output) || !isFinite(output)) return output;
input = input.replace(re,output);
}
}
return output;
},
compute_result: function compute_result(opr_list,a,op,b){
a=a*1; b=b*1;
switch(op){
case opr_list.add: return a+b; break;
case opr_list.sub: return a-b; break;
case opr_list.div: return a/b; break;
case opr_list.mlt: return a*b; break;
case opr_list.mod: return a%b; break;
default: null;
}
}
您可以根据需要添加更多的运算符和事例。为。方块、x^y
等。