指定中的src =“”是没有.mp3扩展名的mp3文件?

我需要一种方法来指定类似的东西

 

有一个mp3文件作为源。 我无法在url的末尾使用.mp3扩展名,所以我需要其他方法来实现这一点。 我正在使用自定义播放器jQuery插件,如果它无法确定音频标签中指定的文件格式,则会回退到旧的浏览器版本。 我有办法实现这个目标吗?

有一个函数检查文件扩展名并尝试匹配

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

如果让我们说这个函数是返回true或者更改为:

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

然后,插件行75的更新代码将假设文件是​​mp3并且在使用src时这样做…源元素仍然可以以传统方式使用。

 else if( canPlayType( 'mp3' ) ) isSupport = true; // here change this 

对于要检测的源类型(如@ruakh建议的那样,代码需要进行编辑(再次):

 if( typeof audioFile === 'undefined' ) { $this.find( 'source' ).each( function() { audioFile = $( this ).attr( 'src' ); var sourceType = $( this ).attr( 'type' ); if( typeof audioFile !== 'undefined' && typeof sourceType !== 'undefined' && canPlayType( sourceType.split( '/' ).pop().toLowerCase() ) ) { isSupport = true; return false; } }); } 

您可以嵌套元素,而不是使用src="..." 。 这将让您指出MIME类型。

对于你的例子:

  

(免责声明:我没有经过测试,看看它有多广泛支持,或者它是否真的解决了你的jQuery插件所带来的问题。我只是基于MDN文档 。)

这是我在这里尝试创作的第一个想法,如果您只需要在最后使用.mp3而不破坏指向页面的链接,您可以使用哈希标记的查询字符串,如

如果您可以修改url,那么会绕过该插件并仍然允许您使用您的url而不具体文件类型。

但是当然如果你不想在最后显示.mp3那么就放弃这个想法。