首页 > 解决方案 > 如何在javascript中播放声音?

问题描述

我在 python 中创建 websocket 服务器来处理通知事件。现在,我可以收到通知,问题是我无法播放声音,因为新的自动播放策略发生了变化,如果我使用 javascript 播放声音它会给我 domexception。请问有什么建议吗?

标签: javascripthtml

解决方案


据我所知,在 html-javascript 中播放声音很简单。像这个例子:https ://stackoverflow.com/a/18628124/7514010

但这取决于您的浏览器以及您如何加载播放,所以问题是:

  • 一些浏览器等到用户点击某些东西,然后让你玩它(找到它的方法)
  • 在某些情况下,浏览器永远不会让你玩,直到地址使用 SSL(意味着你的 url 后面的HTTPS )
  • 加载迟到所以播放迟到/甚至没有开始。

所以我通常这样做:

HTML

<audio id="notifysound" src="notify.mp3" autobuffer preload="auto" style="visibility:hidden;width:0px;height:0px;z-index:-1;"></audio>

JAVASCRIPT(一般)

var theSound = document.getElementById("notifysound");
theSound.play();

如果我想确保在我通知时播放它,最安全的是:

JAVASCRIPT(在你的情况下)

function notifyme(theTitle,theBody) {
    theTitle=theTitle || 'Title';
    theBody=theBody || "Hi. \nIt is notification!";
    var theSound = document.getElementById("notifysound");
    if ("Notification" in window && Notification) {
        if (window.Notification.permission !== "granted") {
            window.Notification.requestPermission().then((result) => {
                if (result != 'denied') {
                    return notifyme(theTitle,theBody);
                } else {
                    theSound.play();
                }
            });
        } else {
            theSound.play();
            try {
                var notification = new Notification(theTitle, {
                    icon: 'icon.png',
                    body: theBody
                });
                notification.onclick = function () {
                    window.focus(); 
                };
            }
            catch(err) {
                return;
            }
        }
    } else {
        theSound.play();
    }
}

(只是希望它被播放。因为甚至可能音量或一些自定义使其失败。)


推荐阅读