当某个事件发生时,我希望我的网站向用户播放短通知音。
这个声音不应该在网站打开时就自动开始播放。相反,它应该通过JavaScript(在特定事件发生时)按需播放。
这对于旧版浏览器(如IE6)也很重要。
所以,基本上有两个问题:
- 我应该使用什么编解码器?
- 嵌入音频文件的最佳实践是什么? (
<embed>
vs.<object>
vs. Flash vs.<audio>
)
当某个事件发生时,我希望我的网站向用户播放短通知音。
这个声音不应该在网站打开时就自动开始播放。相反,它应该通过JavaScript(在特定事件发生时)按需播放。
这对于旧版浏览器(如IE6)也很重要。
所以,基本上有两个问题:
<embed>
vs. <object>
vs. Flash vs. <audio>
)function playSound(url) {
const audio = new Audio(url);
audio.play();
}
<button onclick="playSound('https://your-file.mp3');">Play</button>
Edge 12+,Firefox 20+,Internet Explorer 9+,Opera 15+,Safari 4+,Chrome
只需使用MP3
(适用于旧版浏览器)
function playSound(filename){
var mp3Source = '<source src="' + filename + '.mp3" type="audio/mpeg">';
var oggSource = '<source src="' + filename + '.ogg" type="audio/ogg">';
var embedSource = '<embed hidden="true" autostart="true" loop="false" src="' + filename +'.mp3">';
document.getElementById("sound").innerHTML='<audio autoplay="autoplay">' + mp3Source + oggSource + embedSource + '</audio>';
}
<button onclick="playSound('bing');">Play</button>
<div id="sound"></div>
audio
中添加一个属性,像这样:loop="true"
,并将 embed
中的 loop
设置为 true
。 - joppiesausUncaught (in promise) DOMException: play() failed because the user didn't interact with the document first
。翻译:此代码在Firefox浏览器中运行正常,但在Chrome浏览器中则会在控制台显示以下错误信息:Uncaught (in promise) DOMException: play() failed because the user didn't interact with the document first
。该错误提示播放音频失败,因为用户未与文档进行交互。 - Joseph Ali截至2016年,以下内容足以满足要求(甚至不需要嵌入):
let src = 'https://file-examples.com/wp-content/uploads/2017/11/file_example_MP3_700KB.mp3';
let audio = new Audio(src);
audio.play();
查看更多 这里。
还有一个插件,可以在网站上播放通知声音:Ion.Sound
优点:
设置插件:
// set up config
ion.sound({
sounds: [
{
name: "my_cool_sound"
},
{
name: "notify_sound",
volume: 0.2
},
{
name: "alert_sound",
volume: 0.3,
preload: false
}
],
volume: 0.5,
path: "sounds/",
preload: true
});
// And play sound!
ion.sound.play("my_cool_sound");
如果您想通过JS
自动化该过程:
在html
中的某个地方包含以下内容:
<button onclick="playSound();" id="soundBtn">Play</button>
并通过 js
隐藏它:
<script type="text/javascript">
document.getElementById('soundBtn').style.visibility='hidden';
function performSound(){
var soundButton = document.getElementById("soundBtn");
soundButton.click();
}
function playSound() {
const audio = new Audio("alarm.mp3");
audio.play();
}
</script>
如果你想播放声音,只需在某个地方调用performSound()
!
<script type="text/javascript" src="http://mediaplayer.yahoo.com/js"></script>
使用方法如下:
<a id="beep" href="song.mp3">Play Song</a>
自启动
$(function() { $("#beep").click(); });
display: none
,它就不会再播放声音了。此外,雅虎媒体库在链接左侧显示了一个小的“播放”图标。 - Timo Ernstvisibility: hidden;
是你的答案。 - Starx播放跨浏览器兼容的通知
根据this文章中@Tim Tisdall的建议,使用Howler.js插件。
像chrome这样的浏览器为了性能优化会在最小化或无操作时禁用javascript
执行。但是该插件即使浏览器处于不活动或最小化状态下也会播放通知声音。
var sound =new Howl({
src: ['../sounds/rings.mp3','../sounds/rings.wav','../sounds/rings.ogg',
'../sounds/rings.aiff'],
autoplay: true,
loop: true
});
sound.play();
希望能帮到某些人。
<button type="button" style="display:none" id="playSoundBtn" onclick="playSound();"></button>
现在你可以在想要播放声音时触发按钮
$('#playSoundBtn').trigger('click');
<audio>
标签提供回退到flash的Polyfill。<audio>
Polyfills)var audio = new Audio('audio_file.mp3');
function post()
{
var tval=document.getElementById("mess").value;
var inhtml=document.getElementById("chat_div");
inhtml.innerHTML=inhtml.innerHTML+"<p class='me'>Me:-"+tval+"</p>";
inhtml.innerHTML=inhtml.innerHTML+"<p class='demo'>Demo:-Hi! how are you</p>";
audio.play();
}
sounds = {
test : new Audio('/assets/sounds/test.mp3')
};
sound_volume = 0.1;
function playSound(sound) {
sounds[sound].volume = sound_volume;
sounds[sound].play();
}
function stopSound(sound) {
sounds[sound].pause();
}
function setVolume(sound, volume) {
sounds[sound].volume = volume;
sound_volume = volume;
}