问题描述
我们在 Gmail 中接收 mp3 语音邮件。从今天开始,所有使用 Google Chrome 的计算机都无法播放 Gmail 中的 mp3。这不会影响其他托管 mp3 的网站。
进一步检查后,控制台报告:
Refused to load media from 'https://mail.google.com/mail/u/...' because it violates the following Content Security Policy directive: "media-src https://*.googlevideo.com/videoplayback/".
Gmail 是否不遵守其新的 CSP 政策?除了简单地下载和播放文件之外,还有其他解决方法吗?
解决方法
根据内容安全政策指令 media-src https://*.googlevideo.com/videoplayback/
,无法在嵌入页面的 https://*.googlevideo.com/videoplayback/
/<video>
标签中播放来自与 <audio>
不同来源的媒体文件。
即使您通过 ajax 加载媒体并使用 blob:-Url 创建 <audio>
标签,它也会be blocked 以上 CSP。
它不依赖于浏览器,这就是 CSP 的工作方式。
根据当前的 CSP 限制,媒体文件只能在孤立的浏览上下文中播放,例如 <iframe>
/<object>
/<embed>
。
我不知道 GMail 是有意还是偶尔这样做,但只有使用嵌套浏览上下文的浏览器扩展程序才能在这种情况下播放媒体。
,最后,我创建了一个带有 XMLHTTPRequest
的 Chrome 扩展程序来绕过 CSP 并在不直接下载的情况下播放 mp3。
我发布了一个名为 GPlayer 的 Chrome 扩展程序。等待谷歌批准。我相信未来的链接是 https://chrome.google.com/webstore/detail/obdmmgdlafadeehmbmcmoggnaokehnaj
Github 链接 - https://github.com/TriStarGod/GPlayer