Javascript 如何让Chrome和/或Firefox播放<;音频>;业力测试中的元素?
我正在开发一个库,它可以从HTML5Javascript 如何让Chrome和/或Firefox播放<;音频>;业力测试中的元素?,javascript,google-chrome,firefox,karma-runner,html5-audio,Javascript,Google Chrome,Firefox,Karma Runner,Html5 Audio,我正在开发一个库,它可以从HTML5中提取音频,一旦它们连接到上,就会立即获得音频流,但它仍然有点混乱,并且当前配置为跳过可能失败的测试。如果有必要,我会尝试建立一个简单的例子,但我希望我不需要这样做 如果有什么不同,我会使用OSX。我还没有在Windows或Linux上尝试过这一点。一些浏览器实现会阻止自动播放的尝试,但它们都试图绕过设计的功能,可能在多个浏览器/设备之间不太可靠 根据您的设置和目标浏览器,您可能需要在测试中加入“单击开始”按钮。找到它,至少对于firefox是这样元素显然比我
中提取音频,一旦它们连接到上,就会立即获得音频流,但它仍然有点混乱,并且当前配置为跳过可能失败的测试。如果有必要,我会尝试建立一个简单的例子,但我希望我不需要这样做
如果有什么不同,我会使用OSX。我还没有在Windows或Linux上尝试过这一点。一些浏览器实现会阻止自动播放<代码>的尝试,但它们都试图绕过设计的功能,可能在多个浏览器/设备之间不太可靠
根据您的设置和目标浏览器,您可能需要在测试中加入“单击开始”按钮。找到它,至少对于firefox是这样<代码>
元素显然比我意识到的有更强的CORS规则!我在我的文件服务器上设置了一个访问控制允许源:
头,因为我知道它位于Karma运行我的测试的另一个端口上,但显然这还不够
我似乎在任何地方都找不到关于这个的任何文档,但我碰巧注意到关于CORS的一个chrome错误,并做了更多的挖掘和实验。似乎跨域
元素的脚本处理器需要与
标记在
中使用其内容所需的跨源
属性相同
所以,最后,从
到
在firefox中为我解决了这个问题,chrome有时可以工作,但似乎还有一些其他问题(可能与加载时间有关?)
我相信chrome的第二个问题是,我当时正在立即调用.play()
,然后在测试发出结束
事件时结束测试。。但当缓冲区为空时,该事件似乎也会触发,我认为这是一个bug。在调用.play()
之前,我将其更改为等待canplaythrough
事件,现在它似乎可靠地通过了测试
var audioElement = new Audio();
audioElement.src = "http://localhost:9877/audio.wav";
var audioElement = new Audio();
audioElement.crossOrigin = "anonymous";
audioElement.src = "http://localhost:9877/audio.wav";