Safari 12.1, похоже, перестал запоминать разрешения getUserMedia (в данном случае микрофон) для междоменных фреймов.
Приведен упрощенный пример двух сайтов:
Домен A:
<!DOCTYPE html>
<html>
<head></head>
<body>
<button onclick="triggerUserMedia()">Get User Media</button>
<script>
function triggerUserMedia(){
const constraints = { audio: true, video: false };
navigator.mediaDevices.getUserMedia(constraints)
.then(function(stream) {
console.log('got stream');
})
.catch(function(err) {
console.log('couldn\'t get the stream');
});
}
</script>
</body>
</html>
Домен B:
<!DOCTYPE html>
<html style="height:100%">
<head></head>
<body>
<iframe src="https://domain-a/index.html" allow="microphone"></iframe>
</body>
</html>
В Safari до 12.1 ив текущей сборке Chrome и т. д. нажатие кнопки несколько раз при встраивании в домен B приведет к одному «Разрешить« домену A »использовать ваш микрофон?», только при первом нажатии ».
Однакотеперь это приводит к появлению всплывающих окон при каждом нажатии кнопки.
Кто-нибудь знает, что конкретно изменилось в Safari 12.1, что вызвало изменение этого поведения?(Это новое ограничение безопасности webkit?)
Что можно сделать, чтобы разрешение запрашивалось только один раз, как это было раньше?
(Мы вызываем getUserMedia несколько раз в проектепредназначен для встраивания в разные сайты, поэтому это оказывает значительное влияние на пользовательский опыт) * 1019 *