3

尝试通过 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)
}

但只要调用上述函数,就会引发内容安全策略错误:

拒绝从 'data:application/pdf;base64,JVBERi0xLjQNCiXi48/TDQoxIDAgb2JqDQo8PA0KL1R5cGU...mRvYmoNCjkgMCBvYmoNCjw8DQovVHlwZSAvRm9udA0KL1N1YnR5cGUgL1R5cGUxDQovQmFzZUZ' 加载插件数据,因为它违反了“以下”安全指令“默认”策略

但令人惊讶的是,当数据 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:”

然后错误更改为: 拒绝从'data:application / pdf;base64'加载插件数据,因为它违反了以下内容安全策略指令:“object-src'self'

所以可能需要设置 object-src,但不确定它应该是什么。

4

1 回答 1

0

根据 Chrome 扩展的Content Security Policy的文档,

请注意,script-src 和 object-src 都是由策略定义的。Chrome 不会接受不将这些值中的每一个都限制为(至少)“自我”的政策。

放宽您的扩展的 CSP 以接受 PDF 是不可能的。
然而...

您可以定义沙盒扩展资源,即扩展中不受扩展 CSP 影响的页面。同时,该页面将失去对 Chrome 扩展 API 的访问权限,以防止您页面中的安全漏洞。如果您希望在您的扩展程序和沙盒页面之间进行通信,请使用postMessage- 例如在 Chrome 扩展程序中使用 eval 中所示。安全。.

于 2013-12-08T19:17:14.143 回答