用Javascript播放音频文件

用Javascript播放音频文件,javascript,audio,Javascript,Audio,我正在尝试用js播放音频文件。我做错了什么? 脚本在某些事件后自动停止,这些事件100%正常工作,现在我只想在脚本停止后添加一个声音 以下是中的代码: function stop() { stop_flag = true; var audio = new Audio('play.mp3'); audio.play(); } 下面是完整的script.js函数位于底部 chrome.runtime.onMessage.addListener(function(messag

我正在尝试用js播放音频文件。我做错了什么? 脚本在某些事件后自动停止,这些事件100%正常工作,现在我只想在脚本停止后添加一个声音

以下是中的代码:

function stop() {
    stop_flag = true;
    var audio = new Audio('play.mp3');
    audio.play();
}
下面是完整的
script.js
函数位于底部

chrome.runtime.onMessage.addListener(function(message) {
    if (message.action == "init") {
        init(message.options.divider, message.options.delay, message.options.maxLosses);
    }

    if (message.action == "stop") {
        stop();
    }
});

var stop_flag;

function init(divider, delay, maxLosses) {

    var $table = $('table.dice_table').last();
    var lastBetNumber;
    var lastBetValue;
    var lastProfit;
    var losses = 0;

    stop_flag = false;

    loop_start();

    function loop_start() {

        lastBetNumber = getLastBetNumber();

        var betValue = (getCurrentBalance() / divider).toFixed(9);

        //var betValue = (getCurrentBalance() / divider);

        lastBetValue = betValue;

        $("input.bet").val(betValue);

        play();

        setTimeout(loop, delay);

    }

    function loop() {

        if (stop_flag)
            return;

        waitForTableChange()
            .then(roll)
            .catch(loop_start);

        function roll() {
            //only if the last bet has changed \/

            lastBetNumber = getLastBetNumber();

            lastProfit = $table.children('tbody').children('tr').first().children('td').last().text()[0];

            changeBet();

            if (losses >= maxLosses)
                return;

            play();

            setTimeout(loop, delay);
        }

    }

    function waitForTableChange() {
        return new Promise(function(resolve, reject) {

            var n = 0;

            attempt();

            function attempt() {
                n++;

                if (n >= 100) {
                    reject();
                    return;
                }

                if (getLastBetNumber() == lastBetNumber) {
                    setTimeout(attempt, 100);
                    return;
                }

                resolve();
            }
        });
    }

    function changeBet() {

        var newBetValue;

        if (lastProfit == "-") {
            losses++;
            newBetValue = lastBetValue * 2;
        } else {
            losses = 0;
            newBetValue = (getCurrentBalance() / divider).toFixed(9);
        }

        lastBetValue = newBetValue;

        $("input.bet").val(newBetValue);

    }

    function play() {
        $('input.clDicePlay').first()[0].click();
    }

    function getLastBetNumber() {
        return $table.children('tbody').children('tr').first().children('td').first().text();
    }

    function getCurrentBalance() {
        return $('.dice_select .chosen-single span').text().split('- ')[1].split(' ')[0];
    }

}

function stop() {
    var audio = new Audio('play.mp3');
    stop_flag = true;
audio.play();
}

问题是您在函数
stop()
中设置了
audio
,这使该函数成为本地函数。一旦执行了一个函数,所有本地
var
s将被销毁。您需要使用全局作用域使对象保持活动状态

例如:

//在全局范围内设置“音频”
var audio=新音频('/path/to/default.mp3');
//创建播放/暂停按钮
功能播放暂停(e){
//注意:音频来自gloabl示波器
如果(this.textContent=='Play'){
音频播放();
this.textContent='Pause';
}否则{
audio.pause();
this.textcont='播放';
}
}
window.onload=函数(){
var a=document.getElementById('func');
a、 addEventListener('click',playPause,false);
}

Play
脚本在某些事件后自动停止,并且100%正常工作,现在我要做的就是在它停止后添加一个声音。PS:如果使用像
https://example.com/play.mp3
。。。