1

我的新 ChromeApp 遇到了一些问题。

所以.. 我已经开始使用 JavaScript FileSystem API,所以我用它来创建 mp3 文件(我的应用程序是一个 html5 播放器)。

FileSystem API 中的 FileEntry 对象toURL()为存储在文件系统中的文件提供了方法。在 ChormeApps 中,此方法返回如下内容:

filesystem:chrome-extension://mhldgbaidgpagmimniipggmajbodaeco/persistent/cbd416046ae7a567d4629fc38ac80864.mp3

但是,当我尝试在<audio>标签中使用此 url 作为src属性值时,我收到此错误:

Refused to load media from 'filesystem:chrome-extension://mhldgbaidgpagmimniipggmajbodaeco/persistent/cbd416046ae7a567d4629fc38ac80864.mp3' because of Content-Security-Policy.

所以我尝试使用带有相对路径的清晰名称

<audio src="cbd416046ae7a567d4629fc38ac80864.mp3" />

并使用 Chrome 应用程序根路径

<audio src="chrome-extension://mhldgbaidgpagmimniipggmajbodaeco/cbd416046ae7a567d4629fc38ac80864.mp3"/>

并带有“持久”文件夹

<audio src="chrome-extension://mhldgbaidgpagmimniipggmajbodaeco/persistent/cbd416046ae7a567d4629fc38ac80864.mp3"/>

在最后 3 种情况下,我遇到了 404 错误。那么,如何启用从文件系统加载媒体?清单中的内容 content_security_policy或可能在permissions?或者有什么神奇的途径可以使用?

提前感谢您的回答。

更新: 我使用content_security_policy指令:

default-src 'none'; style-src 'self' 'unsafe-inline'; img-src 'self' http://*.userapi.com; script-src 'self' 'unsafe-eval'; connect-src 'self' http://*.userapi.com http://vk.com http://last.fm http://ws.audioscrobbler.com; media-src 'self';

media-src 'self'并没有带来需要的结果。我仍然遇到错误“拒绝加载媒体”。

更新 2: 我发现了一个丑陋的黑客来做我想做的事:media-src: 'self' *完成这项工作。但是,如果您对如何解决这个问题有一些想法,我会很高兴看到他们。

更新 3: 问题已解决。感谢Mihai Parparita的回答。

4

2 回答 2

1

您需要使用media-src 'self' filesystem:CSP 指令来允许 filesystem: URLs('self'仅在您的扩展中直接包含 URL,而不是包装filesystem:的 URL)。

于 2012-07-20T16:15:53.127 回答
0

您的清单中是否有“content_security_policy”字符串。

如果不是,您是否使用 manifest_version : 2,则“content_security_policy”设置为

“脚本-src 'self'; 对象-src 'self';”

请参阅清单版本 2文档

您可能需要将媒体源添加到 CSP 字符串。

媒体源:“自我”

内容安全策略在MDN 此处进行了解释。

于 2012-07-20T07:35:27.507 回答