Javascript 为什么Chrome要求favicon播放音频?

Javascript 为什么Chrome要求favicon播放音频?,javascript,audio,web-audio-api,Javascript,Audio,Web Audio Api,我正在使用audio()构造函数加载和播放音频文件。这在大多数浏览器中都能正常工作,但每次调用.play()时,Chrome似乎都会对站点的favicon发出新的GET请求。无论文件类型是本地文件、同一站点还是跨站点,都会发生这种情况 它似乎还创建了大量的垃圾内存。有没有办法防止这种情况 打开DevTools并查看networks选项卡,同时单击下面示例中的按钮。 const bounce=新音频('https://www.w3schools.com/graphics/bounce.mp3');

我正在使用
audio()
构造函数加载和播放音频文件。这在大多数浏览器中都能正常工作,但每次调用
.play()
时,Chrome似乎都会对站点的favicon发出新的GET请求。无论文件类型是本地文件、同一站点还是跨站点,都会发生这种情况

它似乎还创建了大量的垃圾内存。有没有办法防止这种情况

打开DevTools并查看networks选项卡,同时单击下面示例中的按钮。
const bounce=新音频('https://www.w3schools.com/graphics/bounce.mp3');
函数playSound(){
弹跳;
}
document.getElementById('bounce')。addEventListener('click',playSound,false)
Play
这似乎是一个在Chrome中被标记为“固定”的插件。然而,截至2020年9月19日,这种情况仍在发生

一种可能的解决方法是在HTML的
标题中包含一个“假”图标。例如,下面的
链接
元素:

<!DOCTYPE html>
<html>
<head>
    <link rel="icon" href="data:,">
    ... Rest of your HTML ...

... 剩下的HTML。。。

这为favicon分配了一个空的数据URL,应该可以防止Chrome自动发送HTTP请求。

经过大量的研究、尝试和错误,我“开发”了一个有效的解决方案

问题何时发生? 似乎每次播放音频时都会出现
favicon.ico
请求,但实际上不一定!只有当音频停止并且需要重新启动时,才会发生这种情况。如果它停了就不会

解决方案。 因此,您需要的是在音频播放到结束并自行停止之前暂停音频

函数播放(音频){//音频元素/标记的任何正常实例
audio.currentTime=0;
音频播放();
setTimeout(()=>audio.pause(),audio.duration*999)
}
const bounce=新音频('https://www.w3schools.com/graphics/bounce.mp3');
函数playSound(){
bounce.currentTime=0;
弹跳;
setTimeout(()=>bounce.pause(),bounce.duration*999)
}
document.getElementById('bounce')。addEventListener('click',playSound,false)

Play
这解决了问题,但也有一个问题,那就是我是否应该仅仅因为一个浏览器中有一个bug而让我的游戏变得不那么好看,而没有favicon供大家使用。Web开发不再有趣。您可以尝试对favicon进行base64编码,并在
href
中使用它,而不是空的
数据:,
,类似于此解决方案:base64编码的favicon是最好的折衷方案。谢谢:)