在得到用户允许后我们还是可以播放本地文件的,在页面中插入一个input节点并指定type为file,然后把该url设置为audio或video的src值即可

这段时间经常看到开发者在反复询问同一个问题,为什么通过设置src属性,不能播放本地的媒体文件?例如video.src=”D:test.mp4”。

这是因为浏览器中的JavaScript不能直接直接访问本地资源(例如文件系统,摄像头,麦克风等),除非事先得到了用户的允许。浏览器之所以进行该限制也是很有必要的,试想一下,如果JavaScript能够肆无忌惮的访问本地的文件系统,那么窃取用户隐私数据就变得轻而易举了,当用户访问网络上的某个网页时,不知不觉中自己机器上保存的信用卡卡号,密码,公司的秘密文件等隐私文件或许已经被恶意的JavaScript程序上传到了远方的服务器上,这对用户来说是不可容忍的。

在得到用户允许后我们还是可以播放本地文件的,下面介绍一种方法。

在页面中插入一个input节点并指定type为file,如果需要播放多个文件,可以添加属性multiple。注册文件节点被更新时的回调函数,在回调函数中调用URL.createObjectURL函数来获取刚选择文件的url,然后把该url设置为audio或video的src值即可。

代码实例如下:


<html>
<body>
<input type="file" id="file" onchange="onInputFileChange()">
<audio id="audio_id" controls autoplay loop>Your browser can't support HTML5 Audio</audio>
<script>
function onInputFileChange() {
var file = document.getElementById('file').files[0];
var url = URL.createObjectURL(file);
console.log(url);
document.getElementById("audio_id").src = url;
}
</script>
</body>
</html>

该代码在Chrome 30和Firefox 24上测试通过,在IE上应该存在一定的兼容性问题(据我所知IE8及以前的版本肯定是不能工作的),因为IE对HTML5的支持不好,不知道IE10有没有实现相关的API。

最新资讯
一款新品出现在蓝牙产品数据库 可能跟苹果芯片电脑有关

一款新品出现在蓝牙产

上周在蓝牙产品数据库中出现了一些新的苹果产品,其中一
经济日报刊文:弥合老年人与数字时代鸿沟,需社会各界共同行动

经济日报刊文:弥合老年

在与老年人相处时,年轻人特别是子女,要少当“低头族”,多
《每日秀》主持人斯图尔特重返电视圈 加盟Apple TV Plus

《每日秀》主持人斯图

苹果将把主持人乔恩·斯图尔特(Jon Stewart)重新带回到
推特脸书谷歌CEO将于周三出席参议院听证会

推特脸书谷歌CEO将于

两位高管将与谷歌母公司Alphabet的CEO桑达尔·皮查伊(S
微软高管解读2021一财季财报:不会孤立看服务器和云服务此消彼长

微软高管解读2021一财

在我们看来,Azure按月付费(annuity)是对公司业务Edge混合
业内人士称特斯拉应对外销售其自动驾驶芯片,与英伟达形成竞争

业内人士称特斯拉应对

comma.ai公司CEO乔治·霍茨(George Hotz)认为,特斯拉应该
最新文章
html5 canvas-1.canvas介绍(hello canvas)

html5 canvas-1.canva

大家都知道,目前并不是所有的浏览器中支持html5,就算是
canvas烟花特效锦集

canvas烟花特效锦集

这篇文章主要介绍了canvas烟花特效锦集,小编觉得挺不错
使用Html5、CSS实现文字阴影效果

使用Html5、CSS实现文

这篇文章主要介绍了使用Html5、CSS实现文字阴影效果的
html5 canvas绘制放射性渐变色效果

html5 canvas绘制放射

这篇文章主要介绍了html5 canvas绘制放射性渐变色效果
canvas基础之图形验证码的示例

canvas基础之图形验证

这篇文章主要介绍了canvas基础之图形验证码的示例的相
利用HTML5+css3+jquery+weui实现仿微信聊天界面功能

利用HTML5+css3+jquer

这篇文章主要介绍了利用HTML5+css3+jquery+weui实现仿