【发布时间】:2013-12-23 19:04:06
【问题描述】:
尝试通过 chrome 扩展应用程序中的 javascript 在“iframe”中加载不同的内容(可以是 pdf、swf 等)。使用数据 URL 方案加载内容:
//这个javascript注册在html文件中,LoadFunction注册在点击按钮的DOMContentLoaded事件中。
void LoadFunction()
{
window.parent.document.getElementById("page_data").src = 'data:application/pdf;base64,' + 'base64 encoded data'; (base64 data is received from a c++ class)
}
但只要调用上述函数,就会引发内容安全策略错误:
从拒绝到负载插件数据 '的数据:应用程序/ PDF格式; BASE64,JVBERi0xLjQNCiXi48 / TDQoxIDAgb2JqDQo8PA0KL1R5cGU ... mRvYmoNCjkgMCBvYmoNCjw8DQovVHlwZSAvRm9udA0KL1N1YnR5cGUgL1R5cGUxDQovQmFzZUZ',因为它违反了以下内容安全政策指令:“默认-SRC '自我' STRONG>
但令人惊讶的是,当数据 url 更改为:'data:image/png;base64,' + 'base64 encoded data';并且图像成功加载到 iframe 中。
据我所知,仅当直接在 html 文件中执行内联代码时才会引发此错误,但这里不是这种情况,如果是这种情况,那么为什么不会为图像文件引发此错误。
另外,如果我尝试将 manifest.json 文件中的内容安全策略设置为: "content_security_policy": "script-src 'self'; object-src 'self' ; frame-src 'self' 数据:"
然后错误变为: 拒绝从 'data:application/pdf;base64' 加载插件数据,因为它违反了以下内容安全策略指令:“object-src 'self'
所以可能需要设置 object-src,但不确定它应该是什么。
【问题讨论】:
标签: javascript google-chrome google-chrome-extension content-security-policy