Extjs,Chrome扩展和内容安全政策

时间:2015-04-01 10:06:07

标签: javascript google-chrome extjs google-chrome-extension

我正在尝试使用Ext JS 5.1.0开发Google Chrome扩展程序。

当我尝试将ext-all.js添加到default_popup html中时,我发现Google Chrome扩展程序无法再使用动态脚本评估技术(如eval()或new Function()),或者将JS代码字符串传递给函数将导致使用eval(),如setTimeout()。

因此,在设置过程中,Google Chrome调试器会返回以下错误:

  

拒绝将字符串评估为JavaScript,因为'unsafe-eval'是   以下内容安全性中不允许使用脚本源   政策指令:“script-src'self'chrome-extension-resource:”   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;
        },

我找到了一个改变content_security_policy

的解决方案
"content_security_policy": "script-src 'self' 'unsafe-eval'; object-src 'self'"

将此行添加到manifest.json允许动态脚本评估技术(但这很危险)。

所以,我想保留标准的Google Chrome安全权限。 有没有办法解决这个问题?

1 个答案:

答案 0 :(得分:1)

您可以查看此处列出的sandbox方法:Build Apps with Sencha Ext JS

关于Chrome应用,但原则仍然适用。您可以使用清单中的sandbox property创建一个沙盒网页,将其嵌入您的网页,然后使用postMessage安全地与其进行通信。沙盒页面无法运行提升权限的Chrome API,从而使eval更安全。

同样,Chrome文档中有一篇名称恰当的文章:Using eval in Chrome Extensions. Safely.