在我的 html 脚本标签上使用 async='true' 加载 socket.io 时.js它会导致 io 对象出现未定义的错误 有什么建议吗?



当将 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会阻止渲染,直到加载为止。

最新更新