在Safari中,document.readyState会从interactive变为complete。
例如,在图像加载之前添加以下内容:
<script>
console.log('Initial ready state', document.readyState);
document.onreadystatechange = function() {
console.log('Ready state changed to:', document.readyState);
}
</script>
输出结果将会是:
Initial ready state – "loading"
Ready state changed to: – "interactive"
// When the connection disconnects:
Ready state changed to: – "complete"
在谷歌浏览器中,readyState 状态不会停留在交互式(interactive)状态,但看起来 Chrome 更擅长重连,所以这可能对你不是一个问题。
编辑:利用这种方法的一种方式是将图像放入 iframe 中,在 Safari 中您将持续获得加载事件(在 Chrome 中无效)。
iframe = document.createElement('iframe')
iframe.onload = console.log
iframe.src = "http://10.0.0.119:8080/stream"
document.body.append(iframe)
编辑2:另一种技术--使用image.decode
来检测连接是否断开并重新加载图像:
<img id="stream" src="http://10.0.0.119:8080/stream"></img>
<script>
let image = document.getElementById('stream');
async function check() {
while (true) {
try {
await image.decode();
} catch {
let src = image.src;
image.src = "";
image.src = src;
}
await new Promise((resolve) => setTimeout(resolve, 5000));
}
}
check();
</script>
error
事件吗?myImg.addEventListener("error", () => {...});
? - zero298