摘要:最近在使用時遇到一個問題,那就是在總是報錯報錯除了瀏覽器,其他瀏覽都沒有報錯。后來了一下發(fā)現(xiàn)是因為調(diào)用的時候,音頻文件還沒有加載完成的問題。例子通過這兩個例子,我在想用低版本還是不兼容。然而卻被現(xiàn)實啪啪的打臉。
最近在使用audio時遇到一個問題,那就是在Chrome DevTools 總是報錯:
Uncaught (in promise) DOMException: The play() request was interrupted by a call to pause().
or
Uncaught (in promise) DOMException: The play() request was interrupted by a new load request.
報錯:
除了google瀏覽器,其他瀏覽都沒有報錯。 而且雖然報錯,其實還是能正常播放聲音,本來想就這樣了,但是看到有報錯。總有一點膈應(yīng)。
后來google了一下 發(fā)現(xiàn)是因為調(diào)用play()的時候,音頻文件還沒有加載完成的問題。
之前代碼:
知道了是這個問題,那么如何修復(fù)呢?
例子:Autoplay通過這個例子已經(jīng)能夠解決問題,
但是新的問題來了,promise在低版本的瀏覽器不支持。
Chrome 50才有 video和audio才在play()上面返回了一個promise;
然后我又看到了這個例子。
例子2:Fetch & Play通過這兩個例子,我在想 用Fetch低版本還是不兼容。于是乎我就想用$.ajax, 因為他的本意不就是一個異步么。先用阿賈克斯請求音頻文件,然后在回調(diào)里面調(diào)用play方法不就可以了么。
然而卻被現(xiàn)實啪啪的打臉。還是不行 報同樣的錯。說明此路不通啊。
沒辦法我就只能再請教google, 然后我在GitHub上面看到有人這樣說;
發(fā)現(xiàn)這也可以。于是我就把我的代碼改了一下:
// 播放聲音 function playVoice(src, domId) { var $dom = $("#" + domId) if ($.browser.msie) { // IE用bgsound標(biāo)簽處理聲音 if ($dom.length) { $dom[0].src = src; } else { $("", {src: src, id: domId}).appendTo("body"); } } else { // IE以外的其它瀏覽器用HTML5處理聲音 if ($dom.length) { $dom[0].load(); setTimeout(function() { $dom[0].play(); }, 200); } else { $("
大家一看也就明白了,就是先load,然后異步去調(diào)用play,但是我用0,在我刷新快,頻繁的時候還是會報錯、于是我就改成200ms,至于延時器里面的200ms,我也是自己大概寫了一個數(shù)字.
以上問題暫時解決。
參考文章:
(https://developers.google.com...
(https://github.com/sampotts/p...
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/104087.html
摘要:前端日報精選十問幫你理清前端工程師及大前端團隊的成長問題譯讀完細(xì)則之后學(xué)到的件事掘金怎么寫一個組件庫一眾成翻譯還有這操作一個能生成思維導(dǎo)圖的開源搜索引擎知乎專欄中文前端推薦第天值得收藏的基礎(chǔ)教程知乎專欄第期沒有的一天轉(zhuǎn)載中回調(diào)地 2017-06-15 前端日報 精選 十問sofish:幫你理清前端工程師及大前端團隊的成長問題![譯] 讀完 flexbox 細(xì)則之后學(xué)到的 11 件事 -...
閱讀 3198·2023-04-26 01:30
閱讀 665·2021-11-08 13:15
閱讀 1774·2021-09-24 10:35
閱讀 999·2021-09-22 15:41
閱讀 1930·2019-08-30 15:44
閱讀 593·2019-08-30 13:22
閱讀 1005·2019-08-30 13:06
閱讀 1197·2019-08-29 13:22