音频自动播放功能也可以在Mozilla,Microsoft Edge和旧版谷歌浏览器中使用,但不能在新版谷歌浏览器中使用。他们阻止了自动播放。有什么方法可以使其在Google Chrome中自动播放音频?
音频自动播放功能也可以在Mozilla,Microsoft Edge和旧版谷歌浏览器中使用,但不能在新版谷歌浏览器中使用。他们阻止了自动播放。有什么方法可以使其在Google Chrome中自动播放音频?
Answers:
解决方案1
我在这里的解决方案是创建一个 iframe
<iframe src="audio/source.mp3" allow="autoplay" style="display:none" id="iframeAudio">
</iframe>
并audio
为非Chrome浏览器标记
<audio autoplay loop id="playAudio">
<source src="audio/source.mp3">
</audio>
在我的 script
var isChrome = /Chrome/.test(navigator.userAgent) && /Google Inc/.test(navigator.vendor);
if (!isChrome){
$('#iframeAudio').remove()
}
else {
$('#playAudio').remove() // just to make sure that it will not have 2x audio in the background
}
解决方案2:
根据@Leonard,还有另一种解决方法
创建一个iframe
不会播放任何内容只是在第一次加载时触发自动播放的播放器。
<iframe src="silence.mp3" allow="autoplay" id="audio" style="display: none"></iframe>
mp3文件silence.mp3的好来源
然后轻松播放您的真实音频文件。
<audio id="player" autoplay loop>
<source src="audio/source.mp3" type="audio/mp3">
</audio>
就我个人而言,我更喜欢解决方案2,因为它是一种更简洁的方法,因为它不那么依赖JavaScript。
2019年8月更新
解决方案#3
作为替代,我们可以使用 <embed>
对于Firefox
似乎音频自动播放正在运行,因此我们不需要该<embed>
元素,因为它将创建双音频运行。
// index.js
let audioPlaying = true,
backgroundAudio, browser;
browser = navigator.userAgent.toLowerCase();
$('<audio class="audio1" src="audio.mp3" loop></audio>').prependTo('body');
if (!browser.indexOf('firefox') > -1) {
$('<embed id="background-audio" src="audio.mp3" autostart="1"></embed>').prependTo('body');
backgroundAudio = setInterval(function() {
$("#background-audio").remove();
$('<embed id="background-audio" src="audio.mp3"></embed>').prependTo('body');
}, 120000); // 120000 is the duration of your audio which in this case 2 mins.
}
另外,如果您有音频的切换事件,请确保删除创建<embed>
的音频元素。
注意:切换后,它将从头开始重新启动,因为<embed>
已经删除了,并且该<audio>
元素现在将正常播放。
$(".toggle-audio").on('click', function(event) {
audioPlaying = !audioPlaying;
$("#background-audio").remove();
clearInterval(backgroundAudio);
if (audioPlaying){
$(".audio1").play();
// play audio
}
else {
$(".audio1").pause();
}
现在确保隐藏这些<audio>
和<embed>
元素
audio, embed {
position: absolute;
z-index: -9999;
}
注意:diplay: none
和visibility: hidden
将使<embed>
元素不起作用。
1-second-of-silence.mp3
为我的项目使用,但是我猜这个集合中的任何文件都可以使用。
在chrome中使用音频标签的自动播放功能确实有一个巧妙的窍门。
加
<iframe src="silence.mp3" allow="autoplay" id="audio"></iframe>
而silence.mp3
只有0.5秒的沉默。
这个
<audio id="player" autoplay controls><source src="0.mp3" type="audio/mp3"></audio>
之后工作。
Chrome会注意到已经播放了声音,并允许在音频标签中自动播放。
自2018年4月起,Chrome的自动播放政策已更改:
“ Chrome的自动播放政策很简单:
在以下情况下,允许自动播放声音:
也
Chrome的开发者网站上有更多信息,包括一些编程示例,可在以下位置找到:https : //developers.google.com/web/updates/2017/09/autoplay-policy-changes
只需按照https://developers.google.com/web/updates/2017/09/autoplay-policy-changes#webaudio中的描述添加此小脚本
<head>
<script>
window.onload = function() {
var context = new AudioContext();
}
</script>
</head>
比这将您想要的工作:
<audio autoplay>
<source src="hal_9000_sorry_dave.mp3">
</audio>
至少您可以使用以下命令:
document.addEventListener('click', musicPlay);
function musicPlay() {
document.getElementById('ID').play();
document.removeEventListener('click', musicPlay);
}
当用户单击页面上的任意位置时,音乐就会开始播放。
它还会立即删除EventListener,因此,如果您使用音频控件,则用户可以将其静音或暂停,并且在他单击其他位置时音乐不会再次开始。
您可以按以下方式简单地使用(.autoplay = true;)(在Chrome桌面上经过测试):
<audio id="audioID" loop> <source src="path/audio.mp3" type="audio/mp3"></audio>
<script>
var myaudio = document.getElementById("audioID").autoplay = true;
</script>
如果您需要添加停止/播放按钮:
<button onclick="play()" type="button">playbutton</button>
<button onclick="stop()" type="button">stopbutton</button>
<audio id="audioID" autoplay loop> <source src="path/audio.mp3" type="audio/mp3">
</audio>
<script>
var myaudio = document.getElementById("audioID");
function play() {
return myaudio.play();
};
function stop() {
return myaudio.pause();
};
</script>
如果您希望“停止/播放”成为一个按钮:
<button onclick="PlayStop()" type="button">button</button>
<audio id="audioID" autoplay loop> <source src="path/audio.mp3" type="audio/mp3">
</audio>
<script>
var myaudio = document.getElementById("audioID");
function PlayStop() {
return myaudio.paused ? myaudio.play() : myaudio.pause();
};
</script>
如果要在同一按钮上显示停止/播放:
<button onclick="PlayStop()" type="button">Play</button>
<audio id="audioID" autoplay loop> <source src="path/audio.mp3" type="audio/mp3">
</audio>
<script>
var myaudio = document.getElementById("audioID");
function PlayStop() {
if (elem.innerText=="Play") {
elem.innerText = "Stop";
}
else {
elem.innerText = "Play";
}
return myaudio.paused ? myaudio.play() : myaudio.pause();
};`
</script>
在某些浏览器中,音频可能无法正常工作,因此,请尝试在代码之前添加iframe:
<iframe src="dummy.mp3" allow="autoplay" id="audio" style="display:none"></iframe>
<button onclick="PlayStop()" type="button">Play</button>
<audio id="audioID" autoplay loop> <source src="path/audio.mp3" type="audio/mp3">
</audio>
<script>
var myaudio = document.getElementById("audioID");
function button() {
if (elem.innerText=="Play") {
elem.innerText = "Stop";
}
else {
elem.innerText = "Play";
}
return myaudio.paused ? myaudio.play() : myaudio.pause();
};
</script>
由于广告的困扰,浏览器已将其隐私权更改为自动播放视频或音频。因此,您可以使用以下代码欺骗。
您可以将任何无声音频放入iframe。
<iframe src="youraudiofile.mp3" type="audio/mp3" allow="autoplay" id="audio" style="display:none"></iframe>
<audio autoplay>
<source src="youraudiofile.mp3" type="audio/mp3">
</audio>
只需添加一个以.mp3作为其源的不可见iframe,并在音频元素之前添加allow =“ autoplay”。结果,浏览器被欺骗来启动任何后续音频文件。或自动播放未静音的视频。
我今天一直在努力解决这个问题,我只想添加一些我在讨论中发现的古玩。
无论如何,我已经摆脱了:
<iframe src="silence.mp3" allow="autoplay" id="audio" style="display:none"></iframe>
<audio id="audio" autoplay>
<source src="helloworld.mp3">
</audio>
这个:
<audio id="myAudio" src="helloworld.mp3"></audio>
<script type="text/javascript">
document.getElementById("myAudio").play();
</script>
最后,这是一个“解决方案”,如果您只想生成自己的东西(我们可以这样做),则有些超出范围:
<script src='https://code.responsivevoice.org/responsivevoice.js'></script>
<input onclick='responsiveVoice.speak("Hello World");' type='button' value='Play' />
我所做的发现以及真正有趣的(奇怪的?奇怪的?可笑的?)部分是,对于前两个,您实际上可以通过给f5适当的冲击来击败系统。如果您非常快地反复执行刷新操作(大约5-10次即可完成操作),音频将自动播放,然后在单次刷新后播放几次,而后又恢复到邪恶的状态。太棒了!
在Google的公告中说,要使媒体文件“自动”播放,必须在用户和网站之间进行交互。因此,到目前为止,我设法解决的最好的“解决方案”是添加一个按钮,使文件播放比自动播放少,但更加稳定/可靠。
我使用pixi.js和pixi-sound.js在chrome和firefox中实现了自动播放。
<script>
PIXI.sound.Sound.from({
url: 'audios/tuto.mp3',
loop:true,
preload: true,
loaded: function(err, sound) {
sound.play();
document.querySelector("#paused").addEventListener('click', function() {
const paused = PIXI.sound.togglePauseAll();
this.className = this.className.replace(/\b(on|off)/g, '');
this.className += paused ? 'on' : 'off';
});
}
});
</script>
HTML:
<button class="btn1 btn-lg off" id="paused">
<span class="glyphicon glyphicon-pause off"></span>
<span class="glyphicon glyphicon-play on"></span>
</button>
它也可以在移动设备上使用,但用户必须触摸屏幕上的某个位置才能触发声音。
iframe
改为使用:
<iframe id="stream" src="YOUTSOURCEAUDIOORVIDEOHERE" frameborder="0"></iframe>
临时修复
$(document).on('click', "#buttonStarter", function(evt)
{
var context = new AudioContext();
document.getElementById('audioPlayer').play();
$("#buttonStarter").hide()
$("#Game").show()
});
或使用自定义播放器触发播放 http://zohararad.github.io/audio5js/
注意:自动播放功能将于12月31日启用
我也添加了控件属性来标记音频,然后将其隐藏在CSS中。而且所有功能都可以在Chrome中正常运行。
<audio autoplay loop controls id="playAudio">
<source src="audio/source.mp3">
</audio>
Google上个月更改了有关在Chrome中自动播放的政策。请看此公告。
但是,如果您嵌入视频并且将其静音,它们确实允许自动播放。您可以添加该muted
属性,并且该属性应允许视频开始播放。
<video autoplay controls muted>
<source src="movie.mp4" type="video/mp4">
<source src="movie.ogg" type="video/ogg">
Your browser does not support the video tag.
</video>
<embed src="silence.mp3" type="audio/mp3" autostart="true" hidden="true">
<audio id="player" autoplay controls><source src="source/audio.mp3" type="audio/mp3"></audio>
使用此解决方案,还可以避免Internet Explorer的打开/保存对话框。
<embed src="http://deinesv.cf/silence.mp3" type="audio/mp3" autostart="true" hidden="true">
<audio id="player" autoplay controls><source src="https://freemusicarchive.org/file/music/ccCommunity/Mild_Wild/a_Alright_Okay_b_See_Through/Mild_Wild_-_Alright_Okay.mp3" type="audio/mp3"></audio>
视频标签也可以播放音频。鉴于音频标签似乎没有应有的行为,您可以将视频标签用于音频:
<video autoplay muted id="audio1" src="your.mp3" type="audio/mp3">
Your browser does not support the <code>video</code> element.
</video>
<script>
unmuteButton.addEventListener('click', function()
{
if ( unmuteButton.innerHTML == "unmute" )
{
unmuteButton.innerHTML = "mute";
audio1.muted = false;
} else {
unmuteButton.innerHTML = "unmute";
audio1.muted = true;
}
});
</script>
<iframe src="link/to/file.mp3" allow="autoplay">
如果原点具有自动播放权限,则可以使用。更多信息在这里。
默认的HTML5audio自动播放属性在chrome中不起作用,但是您可以使用JavaScript强制音频自动播放。尝试这个:
document.getElementById('myAudio').play();
这对我有用。