关于#html# 和 #javascript#的问题:请问能否在html文件里添加js代码,每5秒钟监测一下html文件本身是否被修改并判断是否刷新页面

请问能否在html文件里添加js代码,每5秒钟监测一下html文件本身是否被修改并采取以下措施:

  1. 如果监测到html文件没有被修改,则不刷新页面,

  2. 如果监测到html文件被修改了,则在浏览器上自动刷新页面。

非常感谢提供实现方案!

在html文件中添加javascript代码,实现上述需求。可以通过JavaScript的setInterval方法定时监测文件内容是否被修改,并使用JavaScript的location.reload()方法刷新页面。

<script>
  setInterval(function() {
    // Code to check if the HTML file has been modified
    // ...

    // If the file has been modified, reload the page
    location.reload();
  }, 5000);
</script>

JavaScript是运行在客户端的,不能直接访问服务器端的文件。可以通过访问服务器端的API来判断HTML文件是否被修改。比如,每隔5秒发送一个AJAX请求到服务器端,服务器端可以返回HTML文件的最新版本,然后再在客户端进行对比,如果不同则刷新页面。但是,由于这种方法涉及到服务器端,需要具体的业务需求和技术实现来决定具体的实现方式。这是一种实现方式:

var lastModifiedTime = 0;

setInterval(function() {
  var xhr = new XMLHttpRequest();
  xhr.open("HEAD", window.location.href, true);
  xhr.onreadystatechange = function() {
    if (xhr.readyState === 4 && xhr.status === 200) {
      var currentModifiedTime = xhr.getResponseHeader("Last-Modified");
      if (lastModifiedTime !== currentModifiedTime) {
        lastModifiedTime = currentModifiedTime;
        location.reload();
      }
    }
  };
  xhr.send();
}, 5000);

这段代码每隔5秒钟发送一次HEAD请求,请求的响应包含了文件的最后修改时间("Last-Modified"),如果发现最后修改时间与上次不一样,就重新加载页面。
其他实现方法,如使用AJAX与服务器进行通信来实现页面的动态更新,使用WebSockets进行实时通信等。
举个例子,使用AJAX实现页面的动态更新:

<script>
function loadData() {
  var xhr = new XMLHttpRequest();
  xhr.open("GET", "data.txt", true);
  xhr.onreadystatechange = function() {
    if (xhr.readyState == 4 && xhr.status == 200) {
      document.getElementById("data").innerHTML = xhr.responseText;
    }
  };
  xhr.send();
}
setInterval(loadData, 5000);
</script>
<div id="data"></div>

使用WebSockets实现实时通信:

<script>
var socket = new WebSocket("ws://example.com/socket");
socket.onmessage = function(event) {
  document.getElementById("data").innerHTML = event.data;
};
</script>
<div id="data"></div>

还有使用node.js进行服务端渲染

const express = require('express');
const app = express();

app.get('/', (req, res) => {
  res.send(`
    <html>
      <head>
        <title>Server-side rendering example</title>
      </head>
      <body>
        <h1>Hello, World!</h1>
      </body>
    </html>
  `);
});

app.listen(3000, () => {
  console.log('Server listening on port 3000');
});

这段代码创建了一个使用express框架的服务器,并在根路径的请求下返回一个HTML字符串。可以在这个字符串中插入动态数据,并使用模板引擎(例如ejs)进行渲染。使用React,一个简单的使用React的例子如下:

import React, { useState } from 'react';

function Example() {
  const [count, setCount] = useState(0);

  return (
    <div>
      <p>You clicked {count} times</p>
      <button onClick={() => setCount(count + 1)}>
        Click me
      </button>
    </div>
  );
}

export default Example;

Vue等前端框架实现数据驱动界面

<template>
  <div>
    {{ message }}
  </div>
</template>

<script>
export default {
  data () {
    return {
      message: 'Hello Vue!'
    }
  }
}
</script>


这段代码定义了一个Vue组件,通过data方法返回一个包含message字段的对象。在模板中通过Mustache语法显示message的值。当数据模型发生变化时,Vue将自动更新对应的界面。

关键难点是 是否被修改,你这个难度有点高,我之前看过文章是可以,但是我不太会,去查查资料吧

@mo_54204465
我这个html也是本地的一个报告,所有的数据都在这一个html里面,是每分钟会更新一次。我这样写可以吗?我试了一下不行,请问是哪里有问题吗?

<script>

var lastModifiedTime = 0;
 
setInterval(function() {
  var xhr = new XMLHttpRequest();
  xhr.open("HEAD", "C:\xxxx\Report.html", true);
  xhr.onreadystatechange = function() {
    if (xhr.readyState === 4 && xhr.status === 200) {
      var currentModifiedTime = xhr.getResponseHeader("Last-Modified");
      if (lastModifiedTime !== currentModifiedTime) {
        lastModifiedTime = currentModifiedTime;
        location.reload();
      }
    }
  };
  xhr.send();
}, 5000);
 
</script>

望采纳


var el = document.getElementsByTagName('html')[0].innerHTML;
    var timer = setInterval(function(){
        let nEl = document.getElementsByTagName('html')[0].innerHTML;
        if(nEl!==el){
            clearInterval(timer)
            window.location.reload()
        }
    },5000)
不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^