当在我的html脚本标签上使用async ='true'来加载socket.io.js时,会导致io对象的一个​​未定义的错误任何build议?

将async ='true'作为内联属性添加到html脚本标记以asynchronous提供我的socket.io.js文件时,会在尝试连接到服务器时导致io对象出现未定义的错误。 我通过在head标签中加载我的socket.io来修正这个90%的时间,但是加载最后连接的js文件,但是我宁愿不松散10%的客户,谁都知道如何解决这个问题? 我已经试过在文档加载后连接,就像保持未定义一样。 确保套接字的唯一方法是以100%的概率连接,从脚本标记中删除async ='true'内联属性。 任何build议?

如果要asynchronous加载socket.io ,则需要defer依赖它的脚本,并确保它们位于HTML中的socket.io脚本之下:

 <!DOCTYPE html> <html> <head> ... <script async="true" src="js/socket.io.js"></script> ... </head> <body> ... <script async="true" defer="true" src="js/main.js"></script> </body> </html> 

添加defer确保在asynchronous加载的<script> ,它将按照它存在于HTML中的顺序执行。 当然,如果不支持defer ,那么也不会支持async ,所以它仍然会以正确的顺序加载,只是socket.io.js会阻止渲染,直到它被加载。