我需要一种方法来指定类似的东西
<audio src="http://somesite.com/track/377374"></audio>
有一个 mp3 文件作为源。我无法在 url 末尾使用 .mp3 扩展名,所以我需要其他方法来实现这一点。我正在使用自定义播放器 jQuery 插件,如果它无法确定音频标签中指定的文件格式,它会退回到旧的浏览器版本。我有办法做到这一点吗?
我需要一种方法来指定类似的东西
<audio src="http://somesite.com/track/377374"></audio>
有一个 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="..."
您可以嵌套一个<source>
元素,而不是使用。这将让您指示 MIME 类型。
对于您的示例:
<audio>
<source src="http://somesite.com/track/377374" type="audio/mpeg3" />
</audio>
(免责声明:我还没有测试过它的支持范围有多广,或者它是否真的解决了你在使用 jQuery 插件时遇到的问题。我只是基于MDN 文档。)
这是我尝试在这里发挥创意的第一个想法,如果您只需要在末尾添加 .mp3 而不会破坏页面链接,您可以使用哈希标签的查询字符串,例如
如果您可以修改 url,那么<audio src="http://somesite.com/track/377374?i=.mp3"></audio>
将绕过插件并仍然允许您使用您的 url,而无需具体说明文件类型。
但是,当然,如果您不想在最后显示 .mp3,那么请放弃这个想法。