JS如何獲取瀏覽器聲音、麥克風(fēng)以及通知權(quán)限
今天遇到一個需求,后端socket推送警告消息,瀏覽器提示消息彈框和聲音。但是初次打開頁面發(fā)小聲音播放失敗,控制臺報錯:
錯誤內(nèi)容:play() failed because the user didn't interact with the document first.
意思就是,用戶沒有在當(dāng)前頁面進(jìn)行任何操作。

方案一:手動打開瀏覽器聲音權(quán)限,在瀏覽器地址欄輸入下面鏈接打開瀏覽器設(shè)置
(經(jīng)過測試這個鏈接地址沒有辦法通過a標(biāo)簽和js打開)
Google瀏覽器:chrome://settings/content/sound
Firefox瀏覽器:about:preferences#privacy
Edge瀏覽器:edge://settings/content/mediaAutoplay

方案二:聲音播放失敗提示用戶手動授權(quán),只要用戶跟當(dāng)前頁面存在交互,瀏覽器就不會存在這個錯誤。
// 加載聲音
const sound = new Audio(`video.mp3`)
// 播放聲音
sound.play()
.then((res) => {
console.log('視頻播放成功')
})
.catch((error) => {
// if (error.message.indexOf('didn't interact') !== -1) 判斷報錯內(nèi)容
// 如果視頻播放失敗在這里彈出提示框
alert('由于您的瀏覽器設(shè)置,報警聲音無法自動播放,請點(diǎn)擊確認(rèn)按鈕授權(quán)播放。')
})
這里說下目前沒有發(fā)現(xiàn)獲取聲音權(quán)限和設(shè)置聲音權(quán)限的API
上面是解決辦法,下面講一下瀏覽器獲取麥克風(fēng)、通知,視頻權(quán)限
1、可以通過navigator.permissions.query API 查詢?yōu)g覽器權(quán)限是否開啟。
// 查詢麥克風(fēng)權(quán)限
navigator.permissions.query({ name: 'microphone' })
.then((res) => {
if (res.state === 'granted') {
// 已授權(quán)
}
})
// 查詢相機(jī)權(quán)限
navigator.permissions.query({ name: 'camera' })
.then((res) => {
if (res.state === 'denied') {
// 拒絕授權(quán)
}
})
返回的結(jié)果:{name: "", onchange: "", state: ""}下面權(quán)限列表,都經(jīng)過測試。
microphone 麥克風(fēng)權(quán)限
camera 相機(jī)權(quán)限
geolocation 地理位置信息
notifications。 網(wǎng)站顯示桌面通知權(quán)限
....等權(quán)限
2、可以通過navigator API 設(shè)置瀏覽器允許權(quán)限。

// 設(shè)置麥克風(fēng)權(quán)限
navigator.mediaDevices.getUserMedia({ audio: true })
.then((res) => {
// 允許麥克風(fēng)權(quán)限
})
.catch((error) => {
// 拒絕麥克風(fēng)權(quán)限
})
navigator.geolocation.getCurrentPosition(
() => {
// 允許地理位置權(quán)限
},
() => {
// 拒絕地理位置權(quán)限
})下面設(shè)置權(quán)限,都經(jīng)過測試。
navigator.mediaDevices.getUserMedia({ audio: true }).then() 麥克風(fēng)權(quán)限
navigator.mediaDevices.getUserMedia({ video: true }).then() 攝像頭權(quán)限
navigator.geolocation.getCurrentPosition(callback) 地理位置權(quán)限
Notification.requestPermission().then() 通知權(quán)限
.....等設(shè)置權(quán)限
經(jīng)過在Google、Firefox、Safari、Edge瀏覽器上測試,發(fā)現(xiàn)只有Google瀏覽器全部支持,其他瀏覽器只部分支持。
總結(jié)
到此這篇關(guān)于JS如何獲取瀏覽器聲音、麥克風(fēng)以及通知權(quán)限的文章就介紹到這了,更多相關(guān)JS獲取瀏覽器權(quán)限內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
js實(shí)現(xiàn)web調(diào)用攝像頭 js截取視頻畫面
這篇文章主要為大家詳細(xì)介紹了JS web調(diào)用攝像頭,截取視頻畫面,具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-04-04
js判斷傳入時間和當(dāng)前時間大小實(shí)例(超簡單)
下面小編就為大家分享一篇js判斷傳入時間和當(dāng)前時間大小實(shí)例(超簡單),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-01-01
json數(shù)據(jù)與字符串的相互轉(zhuǎn)化示例
json與字符串之間的轉(zhuǎn)換,在使用中經(jīng)常會遇到,本文有個不錯的示例,大家可以參考下,或許會有所幫助2013-09-09
javascript制作loading動畫效果 loading效果
項(xiàng)目中多處要給ajax提交的時候增加等待動畫效果,所以就寫了一個簡單的通用js方法,大家參考使用吧2014-01-01
TextArea設(shè)置MaxLength屬性最大輸入值的js代碼
TextArea中限制最大輸入長度,實(shí)現(xiàn)的方法種種,我們不在一一介紹,今天本文推薦一種簡單實(shí)用的方法,需要的朋友可以參考下2012-12-12
JavaScript極簡入門教程(二):對象和函數(shù)
這篇文章主要介紹了JavaScript極簡入門教程(二):對象和函數(shù),本文講解了對象基礎(chǔ)知識、函數(shù)基礎(chǔ)知識、函數(shù)調(diào)用、異常、繼承等內(nèi)容,需要的朋友可以參考下2014-10-10
JS在IE和FF下attachEvent,addEventListener學(xué)習(xí)筆記
今天小弄了一下JS事件,主要說一下FF和IE兼容的問題2009-11-11

