javascript - navigator.getUserMedia 不适用于 safari,但适用于其他浏览器
问题描述
在我的应用程序中,我的 xhtml 页面之一正在访问相机,为此我创建了一个脚本,脚本如下
function getCamera() {
navigator.getMedia = ( navigator.getUserMedia || // use the proper vendor prefix
navigator.webkitGetUserMedia ||
navigator.mozGetUserMedia ||
navigator.msGetUserMedia);
navigator.getMedia({video: true}, function() {
console.log("webcam is available ");
document.getElementById('camera-image').style.display='';
document.getElementById('no-image').style.display='none';
}, function() {
console.log("webcam is not available ");
document.getElementById('camera-image').style.display='none';
document.getElementById('no-image').style.display='';
});
}
该脚本在 chrome、firefox、opera 上运行良好,但不适用于 safari。
任何人都可以帮助我吗?
解决方案
根据 MDN Docs,navigator.getUserMedia已被弃用,并且在 Safari 浏览器中不受支持。您可以查看从 MDN 文档中获取的兼容性表。
相反,您可以使用对不同浏览器有更好支持 的navigator.mediaDevices.getUserMedia 。
试试这个代码。希望,这可以帮助你
function getCamera() {
if (!navigator.mediaDevices && !navigator.mediaDevices.getUserMedia) {
navigator.userMedia = navigator.mozGetUserMedia || navigator.getUserMedia
if (!navigator.userMedia) {
alert("Please Update or Use Different Browser");
return
}
navigator.userMedia({
video: true
}, (stream) => showCam(stream), (err) => showErr(err))
return
}
navigator.mediaDevices.getUserMedia({
video: true
})
.then((stream) => showCam(stream))
.catch((err) => showErr(err))
function showCam(stream) {
let video = document.querySelector("video");
video.srcObject = stream;
}
function showErr(err) {
let message = err.name === "NotFoundError" ? "Please Attach Camera" :
err.name === "NotAllowedError" ? "Please Grant Permission to Access Camera" : err
alert(message)
}
}
推荐阅读
- c# - VS Code IntelliSense 在 C# 9.0 上失败
- debugging - 开始调试 xslt 应用程序。.net 核心
- python-3.x - 如何从列表中找到单词的所有组合
- javascript - SFU 和客户端机器之间存在什么类型的连接?
- javascript - 如何从两个firestore集合中获取数据,合并并显示它
- swift - 为什么用户单击通知时 userInfo 不存在?
- php - 管理员中最昂贵的 woocomerce 产品的价格
- c# - 无法通过 Windows(本地主机)上的 Docker 访问 .Net Core 应用程序
- elasticsearch - ElasticSearch 通过具有变量嵌套(或特定 json 字段)的嵌套字段进行聚合
- reactjs - 用表单对子组件之间的组件切换做出反应的方法