服务工作者在获取MP3音频时抛出错误

时间:2015-04-22 21:59:23

标签: javascript html5 google-chrome service-worker

我希望我的网络应用能够针对Android + Chrome上的用户推广添加到主屏幕。 (灵感来自:Chromium Blog entry

要做到这一点,我需要一个服务工作者运行,甚至是一个虚拟的。 (Chrome需要服务工作者证明我对网络应用程序非常认真)

所以我创建了一个没有内容的虚拟服务工作者。它通过正确的无缓存标头提供服务,通过HTTPS提供,并且范围限定为整个域。

通常情况下,每次我尝试动态创建音频元素时都会这样做:

jQuery( '<audio><source src="/beep.mp3" type="audio/mpeg"></source></audio>' );

...我的控制台显示出一些不快乐(取自Chrome Canary以获得来自服务工作者线程的更好的消息,但基本相同的输出是Chrome当前的):

Mixed Content: The page at 'https://my.domain.com/some/page' was loaded over HTTPS, but requested an insecure video ''. This content should also be served over HTTPS.

GET https://my.domain.com/beep.mp3 400 (Service Worker Fallback Required)

我想重要的是要注意,显然,我不是直接检索资源,只是创建元素并让浏览器检索MP3。

实际上MP3确实被获取(我能够在音频元素上运行.play()方法)。只是我的控制台日志中的错误堆积起来,让我怀疑这种方法有多可靠。此外,顺便说一下,在Canary(但不是最新的),失败会将我的“HTTPS锁定”指示器从绿色变为“警告”(因此,未来的问题)。

音频源来自与页面相同的域,两者都是HTTPS。所以来自服务工作者线程的“混合内容”消息很奇怪;它引用了一个带有''作为网址的视频。

问题:我做错了什么或者这是Chrome错误?我需要的不仅仅是假(空)服务工作者吗?如果我做错了什么,我想找到一个最好的练习/长期类型的解决方案,而不是一起破解,但我会采取我能得到的。 ;)

1 个答案:

答案 0 :(得分:0)

它似乎是一个错误。这是Google代码上的问题:

https://code.google.com/p/chromium/issues/detail?id=477685