iOS Safari Web Audio API 限制问题
iOS Safari Web Audio API restriction problem
我目前正在构建一个网络音频播放器,它已经在所有主要的桌面浏览器上运行。但是,iOS 上的 Safari 在自动播放限制方面有一个非常奇怪的行为。
当用户加载音频播放器时,他有两个选项可以开始播放曲目。他要么点击播放控件底部明显的播放按钮(I 元素),要么点击播放列表中的曲目(div 元素)。
这两个选项执行相同的代码,唯一的区别是事件处理程序。
播放按钮选项有效,Safari 没有抱怨。
播放列表项目点击选项不起作用。 Safari 给我这个错误:
Unhandled Promise Rejection: NotAllowedError: The request is not
allowed by the user agent or the platform in the current context,
possibly because the user denied permission.
Safari 是否限制使用哪种元素单击事件处理程序?
这是两个选项的代码:
var ePlay = jQuery('.player .player-controls .play-toggle');
// <--- <i> Element
var ePlaylistSingleTrack = jQuery('.player .playlist .single-track');
// <--- DIV Element
jQuery(ePlay).click(function(){
if (audioElement.paused){
playAndVisualize();
} else {
audioElement.pause();
jQuery(this).removeClass('fa-pause-circle');
jQuery(this).addClass('fa-play-circle');
}
});
jQuery(ePlaylistSingleTrack).click(function(){
if (audioElement.paused){
playAndVisualize();
} else {
audioElement.pause();
jQuery(this).removeClass('fa-pause-circle');
jQuery(this).addClass('fa-play-circle');
}
});
编辑 1:我尝试使用标准事件侦听器而不是 jquery。没有变化。我也尝试使用 I - Element 代替 div,但这也没有帮助。
所以 Mobile Safari 不喜欢虚假的点击事件,因为它是一个触摸设备。你必须使用触摸事件。通常我在所有项目上都这样做,因为它解决了我在移动 safari 中遇到的其他问题。
var myEvent = ('ontouchstart' in document.documentElement) ? 'touchend' : 'click';
document.querySelector('.your-selector-here').addEventListener(myEvent, function () {
// Your Listener here
});
我目前正在构建一个网络音频播放器,它已经在所有主要的桌面浏览器上运行。但是,iOS 上的 Safari 在自动播放限制方面有一个非常奇怪的行为。
当用户加载音频播放器时,他有两个选项可以开始播放曲目。他要么点击播放控件底部明显的播放按钮(I 元素),要么点击播放列表中的曲目(div 元素)。
这两个选项执行相同的代码,唯一的区别是事件处理程序。
播放按钮选项有效,Safari 没有抱怨。 播放列表项目点击选项不起作用。 Safari 给我这个错误:
Unhandled Promise Rejection: NotAllowedError: The request is not allowed by the user agent or the platform in the current context, possibly because the user denied permission.
Safari 是否限制使用哪种元素单击事件处理程序?
这是两个选项的代码:
var ePlay = jQuery('.player .player-controls .play-toggle');
// <--- <i> Element
var ePlaylistSingleTrack = jQuery('.player .playlist .single-track');
// <--- DIV Element
jQuery(ePlay).click(function(){
if (audioElement.paused){
playAndVisualize();
} else {
audioElement.pause();
jQuery(this).removeClass('fa-pause-circle');
jQuery(this).addClass('fa-play-circle');
}
});
jQuery(ePlaylistSingleTrack).click(function(){
if (audioElement.paused){
playAndVisualize();
} else {
audioElement.pause();
jQuery(this).removeClass('fa-pause-circle');
jQuery(this).addClass('fa-play-circle');
}
});
编辑 1:我尝试使用标准事件侦听器而不是 jquery。没有变化。我也尝试使用 I - Element 代替 div,但这也没有帮助。
所以 Mobile Safari 不喜欢虚假的点击事件,因为它是一个触摸设备。你必须使用触摸事件。通常我在所有项目上都这样做,因为它解决了我在移动 safari 中遇到的其他问题。
var myEvent = ('ontouchstart' in document.documentElement) ? 'touchend' : 'click';
document.querySelector('.your-selector-here').addEventListener(myEvent, function () {
// Your Listener here
});