google-chrome - 悬停2018 2019可以在Chrome/Safari中自动播放声音吗?

标签 google-chrome audio safari policy autoplay

我想知道是否有任何方法可以克服Google的新自动播放政策。

当链接悬停时,我想播放一个简短的声音片段,不幸的是,该片段仅适用于Firefox,而不再适用于Chrome和Safari。
有什么办法可以解决该问题?

我想大概不是,只是想将这个问题解决给该 Realm 中受过高等教育的人们。也许有人有一个主意。 :)

多数民众赞成在Firefox中可以使用该代码,并且在chrome和safari中也可以使用-但现在不行了。

html

<span class="hit hitme">Just hit me up!</span>

<audio id="HitMe">
    <source src="sound/hitmeup.mp3">
</audio> 

jQuery的
var audio = $("#HitMe")[0];
$(".hitme").mouseenter(function() {
  audio.play()
$(".hitme").mouseleave(function() {
  audio.pause();
}); 
});   

最佳答案

您的问题很简短,但实际上有很多话要说。

首先,在进行政策更改时,最好使用VanillaJS™代替jQuery,因为标准会立即传播到普通JavaScript,而更改需要一段时间才能传播到jQuery之类的第三方库。使用普通JavaScript的好处是,您可以使用new Audio(<source>)创建一个音频对象-不需要任何HTML元素!参见以下示例:

const audio = new Audio("https://interactive-examples.mdn.mozilla.net/media/examples/t-rex-roar.mp3");

// wait for the DOM to load
window.onload = () => {

  // play audio on click
  const clickToPlay = document.querySelector('#click-to-play');
  clickToPlay.onclick = () => audio.play();
  
  // play/pause audio on hover
  const hoverToPlay = document.querySelector('#hover-to-play');
  hoverToPlay.onmouseover = () => audio.play();
  hoverToPlay.onmouseout = () => audio.pause();
}
/* just some styling, not useful for the solution */
#click-to-play {
  padding: 1em;
  background-color: steelblue;
}
#click-to-play:hover {
  cursor: pointer;
}
#hover-to-play {
  padding: 1em;
  background-color: lightblue;
}
#hover-to-play:hover {
  cursor: crosshair;
}
<div id="click-to-play">
  Click to play
</div>
<div id="hover-to-play">
  Hover in to play, hover out to pause
</div>


大!正如您所精确指出的那样,悬停时自动播放可能会被the 2017 update on autoplay in Chrome阻止。

但这不一定是一件坏事。进行此更新是为了使Web用户体验更好。如果您试图找到有关如何绕过它的技巧,那是错的;)更新指出,如果用户进行了交互(例如单击),则允许自动播放声音。因此,在设计网站时,确保在自动播放出现之前用户单击页面上的某处。这是一个两步单击授权的示例,将鼠标悬停以播放用户体验:

const audio = new Audio('https://interactive-examples.mdn.mozilla.net/media/examples/t-rex-roar.mp3');

window.onload = () => {
  const clickToAuthorize = document.querySelector('#click-to-authorize');
  const hoverToPlay = document.querySelector('#hover-to-play');
  
  clickToAuthorize.onclick = () => {
    hoverToPlay.style.display = 'block';
  }

  hoverToPlay.onmouseover = () => audio.play();
  hoverToPlay.onmouseout = () => audio.pause();
}
#click-to-authorize {
  padding: 1em;
  background-color: steelblue;
}
#click-to-authorize:hover {
  cursor: pointer;
}
#hover-to-play {
  padding: 1em;
  background-color: lightblue;
  display: none;
}
#hover-to-play:hover {
  cursor: crosshair;
}
<div id="click-to-authorize">
  Click if you want to hear a T-Rex roar!
</div>
<div id="hover-to-play">
  Hover to play/pause
</div>

关于google-chrome - 悬停2018 2019可以在Chrome/Safari中自动播放声音吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54891004/

相关文章:

html - 尽管有适当的视口(viewport)元标记,但网站负载在移动设备上略微放大

css - 带有 Z-index 的 Chrome Css 错误

google-chrome - 在 Firefox 扩展中复制 Google Chrome 浏览器操作弹出效果

css - 跨浏览器调整图像大小

c# - 无法播放创建的mp3文件,但可以播放现有文件

iphone - Safari 中不支持 XSLTProcessor() 吗?

jquery - Google Chrome - JQuery 将选项附加到下拉菜单

c# - 具有效果的Windows 8.1应用程序音频(NAudio或SharpDX)

android - Android MediaPlayer播放在线(外部)音频

html - 仅使用 CSS 显示圆形百分比指示器