当将 async='true' 作为内联属性添加到 html 脚本标记以异步提供我的 socket.io.js 文件时,当我尝试连接到服务器时,会导致 io 对象出现未定义的错误。我通过首先在 head 标签中加载我的 socket.io 并加载最后连接的 js 文件来纠正这种情况 90% 的次数,但我宁愿不失去 10% 的客户,有人知道如何解决这个问题吗?我尝试在加载文档后进行连接,就像保持未定义一样。确保套接字以 100% 的机会连接的唯一方法是从我的脚本标记中删除 async='true' 内联属性。有什么建议吗?
如果要异步加载socket.io
,则需要defer
依赖于它的脚本,并确保它们位于HTML中socket.io
脚本的下方:
<!DOCTYPE html>
<html>
<head>
...
<script async src="js/socket.io.js"></script>
...
</head>
<body>
...
<script async defer src="js/main.js"></script>
</body>
</html>
添加defer
可确保在异步加载的<script>
中,它将按照其在 HTML 中存在的顺序执行。当然,如果不支持defer
,那么async
也不会受到支持,因此它仍将以正确的顺序加载,只是socket.io.js
会阻止渲染,直到加载为止。