Javascript Android WebView JS-使用自定义功能在加载时自动启动音频

Javascript Android WebView JS-使用自定义功能在加载时自动启动音频,javascript,html,audio,Javascript,Html,Audio,我为音频标签定制了一个JS函数。它也处理进度条。当我点击相关标签时,它会工作。 但是当我想在页面加载时启动它时,这个函数就不再工作了。 我认为这可能是关于EventListeners的一个原因,但根据我的逻辑,我只在时间线(进度条)中添加了一个事件。我不知道为什么它不会触发音频文件 以下是我的职能: //Play and Pause function playSound(id) { var param1 = "play" + id; var param2 = "audio

我为音频标签定制了一个JS函数。它也处理进度条。当我点击相关标签
时,它会工作。 但是当我想在页面加载时启动它时,这个函数就不再工作了。 我认为这可能是关于EventListeners的一个原因,但根据我的逻辑,我只在时间线(进度条)中添加了一个事件。我不知道为什么它不会触发音频文件

以下是我的职能:

    //Play and Pause
function playSound(id) {
    var param1 = "play" + id;
    var param2 = "audioFile" + id;
    var param3 = "timeline"+id;
    var param4 = "playhead"+id;
    var param5 = "timeNumbers"+id;

    var playBtn = document.getElementById(param1);
    var audioFile = document.getElementById(param2);
    var timeline = document.getElementById(param3);
    var playhead = document.getElementById(param4);
    var progressTime = document.getElementById(param5);

    // start music
    if (audioFile.paused) {
        audioFile.play();
        // remove play, add pause
        playBtn.innerHTML = '<img src="img/pause.svg" />';
        playBtn.className = "paused";
    } else { // pause music
        audioFile.pause();
        // remove pause, add play
        playBtn.innerHTML = '<img src="img/play.svg" />';
        playBtn.className = "playBtn";
    }

    //handle timeline
    var duration = audioFile.duration;
    var timelineWidth = timeline.offsetWidth - playhead.offsetWidth;

    audioFile.addEventListener("timeupdate", timeUpdate, false);
    // makes timeline clickable
    timeline.addEventListener("click", function (event) {
        moveplayhead(event);
        audioFile.currentTime = duration * clickPercent(event);
    }, false);

    function clickPercent(event) {
        return (event.clientX - getPosition(timeline)) / timelineWidth;
    }

    function moveplayhead(event) {
        var newMargLeft = event.clientX - getPosition(timeline);

        if (newMargLeft >= 0 && newMargLeft <= timelineWidth) {
            playhead.style.marginLeft = newMargLeft + "px";
        }
        if (newMargLeft < 0) {
            playhead.style.marginLeft = "0px";
        }
        if (newMargLeft > timelineWidth) {
            playhead.style.marginLeft = timelineWidth + "px";
        }
    }

神奇的是:)

在启动
playsound()函数之前,必须确保加载了所有DOM内容。下面这样的方法可以解决这个问题

document.addEventListener('DOMContentLoaded', function() {
    playsound(2);
}, false);

请参阅。

播放声音(2)
窗口
加载
事件的处理程序中调用吗?请发布您的htmlI尝试了加载-未成功-但函数已执行-我可以看到,因为播放按钮改变了他的状态@Rachel我目前没有简单的麻烦,因为这是一个具有依赖性的大型项目。@Tobisalt需要最小且可验证的示例来重现该问题。只需发布相关摘录,音频源通过url加载-可能还没有准备好??还是生命周期问题?但是window.onload评估这个-我想。@TobiasAlt:除非新的eventListener超出了playsound功能的范围,否则我就正式不知所措了。请不要否决我的意见-但我忘了说我在Android WebView中使用了这个,现在在大多数移动平台(Android、iOS)上都发现了这个->自动播放被阻止以避免糟糕的用户体验。谢谢大家的帮助,我忘了说这是一个网络视图。我现在必须做一个变通办法。@TobiasAlt他们不喜欢把事情做得太简单,让我们保持警惕。祝你好运没错,布莱恩。谢谢,晚上好。如果你遇到这个问题,我找到了解决方案,并在我的问题中进行了更新。
document.addEventListener('DOMContentLoaded', function() {
    playsound(2);
}, false);