Cha*_*les 26 javascript google-chrome eval google-chrome-extension google-chrome-app
我想创建一个包app chrome扩展,以允许用户编写和执行javascript代码(如javascript控制台).
我想使用该eval()函数来执行JS代码.
eval从chrome扩展调用时,经典的javascript 函数会抛出错误:
未捕获的错误:对于此上下文不允许从字符串生成代码
要eval在chrome扩展程序中使用,人们需要使用沙箱,但是当我在清单中编写沙箱时,我收到此错误:
尝试安装此扩展时出现警告:指定的包类型(主题,应用程序等)不允许使用"sandbox".
UPDATE
根据这个问题,包应用程序不支持沙箱,所以我有两个问题:
还有其他方法可以代替eval()吗?
eval没有沙盒可以使用吗?(我想可能不是出于安全考虑?)
aps*_*ers 30
更新:
自2013年1月至今,Chrome现在允许unsafe-eval内容安全策略(CSP)指令,该指令允许eval在沙箱之外执行:
针对该政策
eval()及其亲属一样setTimeout(String),setInterval(String)以及new Function(String)可以通过添加适当放宽'unsafe-eval'您的保单
向扩展程序清单添加适当的CSP,例如:
"content_security_policy": "script-src 'self' 'unsafe-eval'; object-src 'self'"
Run Code Online (Sandbox Code Playgroud)
您引用的错误现已标记fixed,并且自Chrome 22以来已包含在内.
在引入之前'unsafe-eval',没有办法让manifest_version: 2扩展的CSP 允许执行任意文本作为代码. 当时,Google明确表示没有办法删除此限制(在沙盒之外):
内联JavaScript以及危险的字符串到JavaScript方法
eval都不会被执行......没有放松限制执行内联JavaScript的机制.特别是,设置包含的脚本策略unsafe-inline将不起作用.这是故意的.
如上所述,现在可以放宽这种限制.
我想你在谈论新的打包应用程序(清单版本2),对吧?
Sandboxes绝对可以在新的打包应用程序中使用.上周我刚上传了一个样本,它正是这样做的:一个窗口向一个隐藏的沙盒iframe发送一条消息,iframe编译一个把手模板(这里它可以使用eval代替)并将编译后的HTML返回到托管页面,显示结果.
您还可以查看其他样本,它完全符合您的要求.
所以,直接回答你的问题:
1)否,因为CSP的限制.评估Chrome打包应用中动态JavaScript的唯一方法是沙盒iframe.如果这不是您应用的选项,您还可以发送和评估服务器中的JavaScript内容,并仅将结果返回给用户(尽管这会破坏Chrome Packaged Apps的离线功能)
2)不,你只能在沙盒iframe中使用eval().
| 归档时间: |
|
| 查看次数: |
13013 次 |
| 最近记录: |