【问题标题】:playJoin is undefined, unexpected end of input, and files not importing correctlyplayJoin 未定义,输入意外结束,文件未正确导入
【发布时间】:2020-10-10 15:40:44
【问题描述】:

我有一个非常简单的 JavaScript 函数,它循环播放音频文件夹中的一些歌曲。但是,下面的代码产生:

Uncaught ReferenceError: playJoin is not defined

即使它应该被定义为一个函数?我通过验证器运行它,它在语法上是正确的。我遇到的另一个问题是导入音频。即使我更改了文件路径,它也不会更新,即使清除缓存也是如此。

Path: /audio/join-page-audio1.mp3, Status Code: 404 Not Found

有问题的完整代码块如下:

<audio id="join1">
    <source src="/src/audio/join-page-audio1.mp3" type="audio/mpeg">
</audio>

<script>
number = 1
joinSong = "join" + number

function playJoin() {
    let fn = function(number) {
        let joinSong = "join" + number;
        let audio = document.getElementById(joinSong);
        audio.play();
        audio.onended = function() {
            if (number <= 1) {
                fn(number + 1);
            } else {
                fn(1);
            }
        }
    };
    fn(1);
}
</script>

所有这些都在 HTML 头中,并被 bodyonload 事件调用。

【问题讨论】:

  • 第一个问题... fn(1) 由于其闭包范围而无法访问。
  • @sandeepjoshi 我编辑的更好吗?它仍然无法显示为什么根本没有定义 playJoin。
  • 这段代码是内联的还是外部的JS文件?如果是外部的,你是使用async 还是defer 来加载文件?
  • 它是内联的(HTML 文件中的&lt;script&gt;)。我在问题中提到了这一点。
  • 我发现我编辑了错误的文件。无论如何,有没有办法在没有$(window).on("load", function() {}); 的情况下自动播放窗口的音频加载?由于自动播放视频等方面的新更新,它一直说Uncaught (in promise) DOMException: play() failed because the user didn't interact with the document first.

标签: javascript html


【解决方案1】:

你可以依赖功能策略,但它不能保证自动播放,所以你应该准备好后备......

自动播放可用性

作为一般规则,您可以假设只有在以下至少一项为真时才允许媒体自动播放:

  1. 音频已静音或音量设置为 0

  2. 用户与网站进行了交互(通过点击、敲击、按键等)

  3. 如果网站已被列入白名单;如果浏览器确定用户经常与媒体互动,这可能会自动发生,也可能通过首选项或其他用户界面功能手动发生

  4. 如果自动播放功能策略用于向 an 及其文档授予自动播放支持。

否则,播放可能会被阻止。导致阻止的确切情况,以及网站如何被列入白名单的具体情况因浏览器而异,但以上是很好的指导方针。

换句话说,如果在尚未进行任何用户交互的选项卡中以编程方式启动播放,则通常会阻止任何包含音频的媒体的播放。在其他情况下,浏览器可能还会选择阻止。

更多详情请访问documentation

【讨论】:

    猜你喜欢
    • 2015-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-03
    • 2017-04-20
    • 1970-01-01
    • 2020-01-08
    • 2017-01-05
    相关资源
    最近更新 更多