我的应用程序中有一个模式对话框,用于getUserMedia
显示来自用户相机的视频。这会导致出现“拒绝/允许”栏。假设用户在单击“拒绝”或“允许”之前关闭了对话框。即使使用它的元素已经消失,该栏仍然存在。
有没有办法通知浏览器它可以隐藏权限请求,即使用户从未与之交互过?
我的应用程序中有一个模式对话框,用于getUserMedia
显示来自用户相机的视频。这会导致出现“拒绝/允许”栏。假设用户在单击“拒绝”或“允许”之前关闭了对话框。即使使用它的元素已经消失,该栏仍然存在。
有没有办法通知浏览器它可以隐藏权限请求,即使用户从未与之交互过?
当用户关闭您的对话框时,重新加载页面以清除权限请求:
location.reload();
我已经在 Firefox 和 Chrome 41 (Canary) 中对此进行了测试,它在那里工作。
警告:Chrome 39(撰写本文时的当前版本)似乎有一个错误,它不能很好地工作。我第一次导航到该页面时它不起作用,但是在手动刷新页面一次后,它开始工作。
我意识到这个答案可能不会立即有用,但是一旦 Chrome 41 发布,它应该可以工作。
目前无法在不重新加载页面的情况下清除权限提示。
我想你想要这样的东西:
$("body").on('click', "#stop_button", function(e) {
e.preventDefault();
mediaStream.stop();
});
mediaStream 是我调用 getUserMedia 时定义的全局变量
navigator.getUserMedia(
{
video: true,
audio: false
},
function(stream) {
if (navigator.mozGetUserMedia) {
video.mozSrcObject = stream;
} else {
var url = window.URL || window.webkitURL;
video.src = url ? url.createObjectURL(stream) : stream;
}
mediaStream = stream;
video.play();
},
function(error) {
console.log("ERROR: " + error);
}
);
因此,在您的示例中,当对话框关闭时,您将在媒体流上调用 stop() - 您必须为此创建一个事件处理程序。
查看getUserMedia上的本教程以获取完整的示例和现场演示。