Javascript Extjs、Chrome扩展和内容安全策略
我正在尝试用ExtJS5.1.0开发一个Google Chrome扩展 当我试图将ext-all.js添加到默认弹出式html中时,我发现Google chrome扩展无法再使用动态脚本求值技术,如eval()或new Function(),也无法将js代码字符串传递给会导致使用eval()的函数,如setTimeout() 因此,在安装过程中,google chrome调试器返回以下错误: 拒绝将字符串作为JavaScript求值,因为“不安全求值”为 不允许以下内容安全中的脚本源 策略指令:“脚本src‘self’chrome扩展资源:”。Javascript Extjs、Chrome扩展和内容安全策略,javascript,google-chrome,extjs,google-chrome-extension,Javascript,Google Chrome,Extjs,Google Chrome Extension,我正在尝试用ExtJS5.1.0开发一个Google Chrome扩展 当我试图将ext-all.js添加到默认弹出式html中时,我发现Google chrome扩展无法再使用动态脚本求值技术,如eval()或new Function(),也无法将js代码字符串传递给会导致使用eval()的函数,如setTimeout() 因此,在安装过程中,google chrome调试器返回以下错误: 拒绝将字符串作为JavaScript求值,因为“不安全求值”为 不允许以下内容安全中的脚本源 策略指令:
ext all debug.js:8742 ext.ClassManager.ext.apply.getInstantiator 这是一段错误的代码
getInstantiator: function(length) {
var instantiators = this.instantiators,
instantiator, i, args;
instantiator = instantiators[length];
if (!instantiator) {
i = length;
args = [];
for (i = 0; i < length; i++) {
args.push('a[' + i + ']');
}
// The problem is here
instantiator = instantiators[length] = new Function('c','a','return new c(' + args.join(',') + ')');
instantiator.name = "Ext.create" + length;
}
return instantiator;
},
将这一行添加到manifest.json
中允许使用动态脚本评估技术(但这是危险的)
所以,我想保留标准的谷歌浏览器安全权限。
有办法解决这个问题吗?您可以看看这里概述的
沙盒方法:
这是关于Chrome应用程序的,但原则仍然适用。您可以使用清单中的创建一个沙盒页面,将其嵌入到页面中,并使用postMessage
安全地与其通信。沙盒页面无法运行提升权限的Chrome API,使eval使用起来更安全
同样,Chrome文档中有一篇命名恰当的文章:
"content_security_policy": "script-src 'self' 'unsafe-eval'; object-src 'self'"