【发布时间】:2020-02-03 09:57:52
【问题描述】:
我有一个简单的 Electron 应用程序,它查询 SQL 数据库并通过 HTML 表显示输出。我的一切工作正常,但现在我需要每 X 分钟“刷新”一次 HTML 表(使用 SQL 查询的新结果)。
现在,我直接在 HTML 中使用元标记使其正常工作:http-equiv="refresh" content="300"。这会每 5 分钟正确刷新一次页面,这正是我想要的。
虽然,问题是在 SQL 查询执行并构建 HTML 时,刷新会导致屏幕变白。显然,更好的解决方案是使用 DOM 并仅修改自上次刷新以来实际更改的单元格。我遇到的问题是让“setInterval”正常工作......再一次,这是一个非常简单的电子应用程序。我正在使用他们的起始样板。我尝试在<body> 标签中添加“setInterval”,使用如下代码:
<body onload='setInterval(updateTable(), 300000);'>
但代码只触发一次...我还尝试在正文末尾添加以下代码(就在</body> 标签内):
<script>
window.onload=function(e){
setInterval(updateTable(), 300000);
}
</script>
...从 window.onload 处理程序中删除它...:
<script>
setInterval(updateTable(), 300000);
</script>
...也可以将其移至“renderer.js”文件:
setInterval(updateTable(), 300000);
在所有情况下,它只会触发一次...我知道这一点,因为 updateTable() 中的第一行代码通过 console.log() 将当前日期和时间输出到控制台..
我已经尝试将超时值降低到 10 秒(从 300000 到 10000),这样我就不必在测试时等待这么长时间,这没有任何区别。我怀疑我遇到的问题与我缺乏对电子框架的知识有关(比如,可能是不同的“过程”),我已经寻找解决方案两天了,但没有运气。非常感谢任何关于我如何做到这一点的建议!
【问题讨论】:
-
嗨 Shayne,您是否尝试过将
setInterval移到window.onload函数之外?它不应该有所作为,但谁知道:)。除此之外,您能否包括如何检查它是否只触发一次?例如。在updateTable函数中带有console.log。 -
感谢您的快速回复。是的,我有。查看我对主页所做的编辑...
-
您的页面中还有
<meta http-equiv="refresh" content="300"吗?如果是这样,删除它可能是值得的。您还可以包含整个renderer.js文件吗?或者如果太大只是相关部分。 -
是的,我删除了刷新元标记(否则,它实际上会刷新)。除了默认的 cmets,“renderer.js”文件是空的。正如我所提到的,这是一个非常简单的应用程序。
-
您是否尝试过将整个
updateTable函数移动到setInterval中?例如。setInterval(function () { Update table code goes here }, 10000);.
标签: electron