使用JavaScript检测文件系统上的页面何时已更改

时间:2018-12-09 01:56:15

标签: javascript jquery html ajax filesystems

当页面位于本地文件系统(file:///而非http://https://)上时,是否可以检查页面是否已更改?

有些答案here使用AJAX来检查“最后修改的”标头的标头,但是在使用文件协议时不会返回该标头。

以下是在本地测试时Firefox中返回的标头:

// headers
Content-Type: text/xml
Content-Length: 20941

更新
看起来响应已设置为文件,并且响应上具有lastModified属性。我已经添加了答案。

4 个答案:

答案 0 :(得分:1)

您可以做的是将请求标头从HEAD更改为GET / POST,这将返回一个responseText值。从那里开始,非常容易检查-在名为original或类似名称的GET / POST调用之前获取一个值,将其与响应进行比较,并在必要时进行更改。

答案 1 :(得分:1)

根据您在评论中的答复,我将使用某种形式的页面缓存。

选中this answer,以字符串的形式获取页面的当前内容,并对其进行缓存/对其进行哈希处理。从那里,对当前页面执行AJAX请求并比较内容/哈希。如果不匹配,则可以重新加载页面。

let contents = document.documentElement.outerHTML;
let frequency = 5000; // How often to check for changes (ms)

setInterval(() => {
    let xmlhttp = new XMLHttpRequest();

    xmlhttp.addEventListener("load", (res) => { 
        if(res.responseText != contents)
            window.location.reload(true);
    });

    xmlhttp.open("GET", window.location.href);
    xmlhttp.send();
}, frequency);

答案 2 :(得分:1)

经过一些调试后,我注意到响应设置为response属性中的文件,并且该文件上具有lastModified属性!

修改@bugfroggy的答案中的代码似乎可行:

http://

注意:我认为上面的代码使用了ES5或ES6功能,我不知道它是否可以在服务器(https://BaseInFilter)上运行。

答案 3 :(得分:0)

使用可以自动重新加载更改的dev网络服务器,最好还是通过文件服务器从服务器上进行测试。