在Javascript之前先加载HTML

在Javascript之前先加载HTML,javascript,html,node.js,socket.io,Javascript,Html,Node.js,Socket.io,我正在尝试实时开发一些东西,在本例中,我将socketio用于nodejs。尽管其他一切都正常工作,但我现在的主要问题是,我的程序在加载HTML之前先加载javascript,这意味着开始时的输出是空的 在我的代码中,javascript调用数据库中的所有其他内容,并通过标记连接起来,标记中的标记稍后会在html中抛出 以下是我的html代码: 名称 地址 数 名称 地址 数 下面是javascript: var online=document.getElementById('online'

我正在尝试实时开发一些东西,在本例中,我将socketio用于nodejs。尽管其他一切都正常工作,但我现在的主要问题是,我的程序在加载HTML之前先加载javascript,这意味着开始时的输出是空的

在我的代码中,javascript调用数据库中的所有其他内容,并通过标记连接起来,标记中的标记稍后会在html中抛出

以下是我的html代码:


名称
地址
数
名称
地址
数
下面是javascript:

var online=document.getElementById('online'),
offline=document.getElementById('offline');
socket.on('user joined',函数(数据){
online.innerHTML=“”;
对于(变量ctr=0;ctr
我已经在网上搜索过了,但是我的情况有所不同,因为我在html中调用javascript文件,而不是将所有脚本与html本身一起使用

我也读过,在html工作后调用javascript文件,但显然,我已经这样做了(如我的代码所示),但仍然没有做任何事情。

您可以使用:


DOMContentLoaded事件在初始HTML文档完全加载和解析时触发,而不等待样式表、图像和子帧完成加载。一个完全不同的事件加载应该只用于检测一个完全加载的页面。在DOMContentLoaded更合适的地方使用load是一个非常常见的错误,所以要小心

将JavaScript代码包装为:

document.addEventListener("DOMContentLoaded", function(event) { 
  // your code here
});
这可能会奏效:

<body onload="script();">
甚至

window.onload = function ...

从以下Manums答案复制您可以使用DOMContentLoaded:


DOMContentLoaded事件在初始HTML文档完全加载和解析时触发,而不等待样式表、图像和子帧完成加载。一个完全不同的事件加载应该只用于检测一个完全加载的页面。在DOMContentLoaded更合适的地方使用load是一个非常常见的错误,所以要小心。更多关于DOMContentLoaded的信息-

这是一段代码片段,等待页面加载,然后打开chat.js文件。


名称
地址
数
名称
地址
数
函数downloadJSAtOnload(){
var元素=document.createElement(“脚本”);
element.src=“/chat.js”;
document.body.appendChild(元素);
}
if(window.addEventListener)
addEventListener(“加载”,downloadJSAtOnload,false);
else if(窗口附件)
window.attachEvent(“onload”,downloadJSAtOnload);
else window.onload=下载jsatonload;

我找到了问题的答案。 这似乎不是html问题,也不是javascript问题,而是socketio问题


我使用的是“socket.broadcast.emit”,而不是“io.sockets.emit”

这是一个常见的问题,可以通过将JavaScript代码封装在其中来轻松解决

window.setTimeout(function() {

// your js code goes here

}, 500);

是否可以使脚本仅在主体加载后执行?这对您的用例很有用,我理解,这也是我想要实现的,但是我对前端的任何关系都不太熟悉,更不用说html(甚至css)。也就是说,你能告诉我怎么做吗?看这个问题:@摩羯座-我试着按照链接上的话做,但是它对我不起作用。也许我做错了?你能给我们看看你的浏览器控制台吗?只需按F12并选择控制台选项卡。如果那里记录了一个错误,这可能会有所帮助。请有人解释为什么这个答案对我有用,只是缺少一些解释。DomainContentLoaded事件是在初始HTML文档完全加载和解析后触发的,不需要等待样式表、图像和子框架完成加载。一个完全不同的事件加载应该只用于检测一个完全加载的页面。在DOMContentLoaded更合适的地方使用load是一个非常常见的错误,所以要小心。更多关于-我很抱歉,但是,谁能告诉我如何将此与我提供的代码合并?我试过了,但不管用。我想我做错了。我感谢你回答我的问题的努力,但是仍然不起作用。有什么替代方法可以使用吗?@DayIsGreen您是否尝试过在html文件中直接输入脚本?是的,虽然它可以使用,但我更喜欢这样做(在上面的代码中),因为当我将它直接放在html文件中时遇到问题,例如旧记录与新记录连接,但这是另一个问题,所以我希望坚持我已经做过的。@DayIsGreen另一个替代方法可能是使用onload函数
函数myFunction(){//code在此加载脚本}
或类似的方法。按F12键时,根据控制台选项卡,这似乎不会产生任何错误,然而,它仍然不起作用。我非常确定在每次加载页面时都会记录加载时发送的数据。不适合我。如果我
window.setTimeout(function() {

// your js code goes here

}, 500);