我一直在开发一个在线应用程序,允许用户点击并操作mp3文件,我试图从我的计算机加载本地文件到一个wavesurfer对象,但我一直在chrome中得到这个错误:
“CORS策略已阻止从源”null“访问位于”file:///local/file/path/to/audio/files/some.mp3“的XMLHttpRequest:只有以下协议方案支持跨源请求:http、数据、chrome、chrome扩展、https。”
我试过将HTML和mp3文件放在多台计算机上的多个不同文件夹中,但似乎没有任何效果。
<body>
<script src="https://cdnjs.cloudflare.com/ajax/libs/wavesurfer.js/1.2.3/wavesurfer.min.js"></script>
<div id="waveform"></div>
<script>
var wavesurfer = WaveSurfer.create({
container: '#waveform',
waveColor: 'darkorange',
progressColor: 'blue',
height: 64,
backend: 'MediaElement'
});
//setRequestHeader('Origin', document.domain);
//wavesurfer.load("http://ia902606.us.archive.org/35/items/shortpoetry_047_librivox/song_cjrg_teasdale_64kb.mp3");
var song = "clippedJaco.mp3";
wavesurfer.load(song);
wavesurfer.on('ready', function () {wavesurfer.play();});
</script>
</body>
当添加“MediaElement”后端时,MP3会加载,但不会生成波形。任何帮助都非常感谢,谢谢!
3条答案
按热度按时间busg9geu1#
由于你不能从外部源加载资源,出于安全原因,如果你试图从非HTTP源加载资源,这可能会很烦人。有时候不可能放置一个迷你HTTP服务器或修改浏览器标志(不要这样做,这很危险)来解决这个问题。
我最近偶然发现了这个问题,并在一个博客(作者卡洛斯Delgado)上找到了一个很好的解决方案,它使用HTML输入元素加载本地资源,并使用JS blob文件读取器将这些内容传递给wavesurfer代码。
vc6uscn92#
据我所知,这是因为出于安全原因,浏览器限制从脚本内部发起的跨源HTTP请求。这意味着使用XMLHttpRequest和Fetch API的Web应用程序只能从加载应用程序的同一源请求HTTP资源,除非来自其他源的响应包含正确的CORS头。
来源:Cross-Origin Resource Sharing (CORS)
解决这个问题的一个方法是在localhost中托管您的web应用程序。您可以使用this开始。然后在
index.html
文件中调用wavesurfer.js
并创建一个波形将出现的容器。index.html
然后添加一个脚本来处理wavesurfer示例。
test.js
这样我就不会在wavesurfer中加载本地音频文件了。希望这能有所帮助。
nwsw7zdq3#
此代码片段将工作从本地文件夹加载音频文件。