![](/img/trans.png)
[英]video.play() occurred unhandled rejection (notallowederror) on IOS
[英]React - play audio onClick is causing an "Unhandled Rejection (NotAllowedError)" on iOS devices?
我的問題的沙盒演示: https://codesandbox.io/s/jolly-fermat-j23w9
我正在嘗試在我的 React 站點上實現一個功能,用戶單擊一個元素並播放音頻。
在桌面上,這工作正常。 但是在 iOS 設備上,我遇到了“未處理的拒絕(NotAllowedError)”。 此錯誤通常是由 iOS 設備上的自動播放媒體引起的。 但是,在這種情況下,用戶必須單擊該元素才能啟動音頻,因此不應發生此錯誤。
我的懷疑是,由於 state 上的組件重新呈現更改,React 不知道用戶必須與站點交互才能觸發音頻。
這是基本代碼:
// audio playing function, found on this stackoverflow question:
// https://stackoverflow.com/questions/47686345/playing-sound-in-reactjs
const useAudio = url => {
const [audio] = useState(new Audio(url));
const [playing, setPlaying] = useState(false);
const toggle = () => setPlaying(!playing);
useEffect(() => {
playing ? audio.play() : audio.pause();
}, [playing]);
return [playing, toggle];
};
// url of audio is passed in as prop from App.js
const PlayAudio = ({ url }) => {
const [playing, toggle] = useAudio(url);
return (
<>
<PlayButton onClick={toggle}>{playing ? "Pause" : "Play"}</PlayButton>
</>
);
};
使用 Safari、Chrome 和 Firefox 瀏覽器在 iPhone 上測試。
同樣,可以在此處找到完整的工作演示,您需要檢查 iOS 設備以查看錯誤: https://codesandbox.io/s/jolly-fermat-j23w9
任何幫助表示贊賞。
這應該工作: setTimeout(audio.play)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.