当页面位于本地文件系统(file:///
而非http://
或https://
)上时,是否可以检查页面是否已更改?
有些答案here使用AJAX来检查“最后修改的”标头的标头,但是在使用文件协议时不会返回该标头。
以下是在本地测试时Firefox中返回的标头:
// headers
Content-Type: text/xml
Content-Length: 20941
更新:
看起来响应已设置为文件,并且响应上具有lastModified属性。我已经添加了答案。
答案 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网络服务器,最好还是通过文件服务器从服务器上进行测试。