You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript音乐播放器静态资源目录无法被浏览器识别的问题求助

解决音乐播放器资源404错误的方案

问题根源

浏览器请求资源时使用的是**相对于页面(index.html)**的路径,而非JavaScript模块文件的路径。你的initializeModifySongsArray.js里用了../../assets/...的相对路径,这是从JS文件所在的src/components目录向上回溯的路径,但实际页面入口index.html和assets是同级目录,导致路径指向错误,触发404。

另外,当前获取音频时长的逻辑存在问题:直接访问Audio.duration会得到NaN,因为音频元数据还未加载完成。

修复步骤

1. 修正资源路径

把歌曲数组里的mp3Path和coverPath中的../../assets/替换为./assets/,因为index.html与assets目录处于同一层级:

let songs = null;

songs = [
  {
    songName: "Miles Above You",
    singer: "Jesse Warren",
    album: "BreakingCopyright.com",
    mp3Path: "./assets/songs/Jesse Warren - Miles Above You (BreakingCopyright.com).mp3",
    coverPath: "./assets/song-covers/BreakingCopyright_Logo_White_BG.png"
  },
  {
    songName: "Rise",
    singer: "Tubebackr",
    album: "BreakingCopyright.com",
    mp3Path: "./assets/songs/tubebackr - Rise (BreakingCopyright.com).mp3",
    coverPath: "./assets/song-covers/BreakingCopyright_Logo_White_BG.png"
  }
];

2. 修复音频时长获取逻辑

修改loadSongsArrayElementsMetadata函数,等待音频元数据加载完成后再获取时长,用Promise封装异步逻辑:

const loadSongsArrayElementsMetadata = async () => {
  await Promise.all(songs.map(async (individualSongElement) => {
    return new Promise((resolve) => {
      const audio = new Audio(individualSongElement.mp3Path);
      audio.addEventListener('loadedmetadata', () => {
        individualSongElement.durationInSeconds = audio.duration;
        resolve();
      });
      // 触发音频加载
      audio.load();
    });
  }));
};

3. 确认服务器根目录

确保你的本地服务器(比如Live Server)是把front-end目录作为根目录启动的,而非上级目录。只有服务器根目录指向front-end,./assets/...的路径才能正确定位到资源。

验证修复

修改完成后重新运行项目,浏览器会正确请求http://127.0.0.1:5500/assets/songs/...路径下的资源,404错误会消失,同时音频时长也能正常获取。

内容的提问来源于stack exchange,提问作者Aakash

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 21:36:12