【问题标题】:jQuery <audio> Plugin Doesn't work in Firefox and OperajQuery <audio> 插件在 Firefox 和 Opera 中不起作用
【发布时间】:2015-10-15 20:55:44
【问题描述】:

我正在使用自定义&lt;audio&gt; 播放器的插件,一切都很好。我在 Mac OSX 10.8.2 上的 Safari 浏览器中工作,一旦我决定在其他浏览器中测试项目,事情就变得很奇怪。简而言之,插件应该在页面中找到&lt;audio&gt; 标签,然后将它们更改为不同的自定义标记。在 safari 中运行良好,但在 firefox 和 opera 中似乎无法运行

Firefox 和 Opera 存在以下问题,插件中有一部分,如果音频源的格式不受支持,则会创建不同的(迷你)播放器,这基本上是旧浏览器的后备,但我不知道如何firefox 和 opera 展示了这个后备播放器,因为它们都是非常现代的浏览器。

插件最初来自:http://tympanus.net/codrops/2012/12/04/responsive-touch-friendly-audio-player/ 但是我做了一些更改,例如

canPlayType   = function( type )
        {
        var audioElement = document.createElement( 'audio' );
        return !!( audioElement.canPlayType && 
                   audioElement.canPlayType( 'audio/' + type.toLowerCase() + ';' ).replace( /no/, '' ) );
        };

原来是

canPlayType   = function( file )
        {
            var audioElement = document.createElement( 'audio' );
            return !!( audioElement.canPlayType &&
                    audioElement.canPlayType( 'audio/' + file.split( '.' ).pop().toLowerCase() + ';' ).replace( /no/, '' ) );
        };

还有一个小改动

else if( canPlayType( 'mp3' ) ) isSupport = true;

原件在哪里

else if( canPlayType( audioFile ) ) isSupport = true;

这些修改是为了指定 src 中的文件是 mp3,而不是自动检测它(因为我没有使用本地文件,而是 soundcloud api 生成的 url)。我看不出这些更改如何影响浏览器无法使用插件。由于涉及的代码文件很多,我没有将它们全部发布在这里,而是创建了一个 dropbox 文件夹供您自己在这里查看,您可以在不同的浏览器中尝试 index.html 文件,这样您就可以看到我的问题谈论: https://www.dropbox.com/sh/xutioz3hyrybvz3/f0-528WzH0


编辑:我还在 jsbin http://jsbin.com/unupov/1/edit 上创建了一个现场演示,这样你就可以看到播放器在不同浏览器中的行为

编辑 2: 忽略 chrome 的问题,感谢 user20140268 这些问题已得到修复。

【问题讨论】:

    标签: javascript jquery html jquery-plugins soundcloud


    【解决方案1】:

    我将链接更改为 CSS:

    <link rel="stylesheet" href="css/reset.css">
    <link rel="stylesheet" href="css/player.css">
    

    以及脚本:

    <script src="http://code.jquery.com/jquery-1.9.1.min.js"></script>
    <script src="js/player.js"></script>
    

    现在它在chrome 中运行良好

    更新:
    看来&lt;audio/&gt;中的firefox和operadon't support mp3
    在这种情况下,player.js 将 &lt;audio/&gt; 标记回退到 &lt;embed/&gt;
    没有 API 来控制 &lt;embed/&gt; 的播放,您可以使用 flash 或使 &lt;embed/&gt; 可见更改 player.js 在 line 70

    var thePlayer = !isSupport 
                ? $('<embed src="' + audioFile + '" width="100%" height="25" volume="100" autostart="' + isAutoPlay.toString() +'" loop="' + isLoop.toString() + '" />')
                : $( '<div class="' + params.classPrefix + '">' + $( '<div>' ).append( $this.eq( 0 ).clone() ).html() + '<div class="' + cssClass.playPause + '" title="' + params.strPlay + '"><a href="#">' + params.strPlay + '</a></div></div>' ),
    

    并删除thePlayer.addClass( cssClass.mini );line 171

    【讨论】:

    • 确实修复了 chrome 的问题,但是 firefox 和 opera 的行为仍然很奇怪;/ 我将编辑我的问题以摆脱 chrome 问题
    • 你好,谢谢你的帮助,没想到firefox不支持mp3文件,一旦堆栈溢出让我这样做,我会给你一个赏金;))
    【解决方案2】:

    文件类型mp3 可能有不同的元类型,您可以正确定义以使其工作

    audio/x-mpeg-3
    

    audio/mpeg3
    

    audio/mpeg
    

    中尝试其中一种
    audioElement.canPlayType('audio/' + type.toLowerCase() + ';' )
    

    我认为这可能可行,因为 Firefox 和 opera 使用严格的 JS 和数据类型,而且它们不支持某些格式!

    尝试并回复是否有效:)

    【讨论】:

    • 嗨,是的,我试过了 x-mpeg-3 根本不起作用,mpeg3 只能在 safari 中工作(由于某种原因 google chrome 不喜欢它),据我所知现在,firefox 和 opera 不支持 mp3 格式;/
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-16
    相关资源
    最近更新 更多