Javascript+HTA,重新加载iframe并保持滚动位置



我很久以前创建了一个帐户,但我从未真正使用过它,因为我总是设法在已经解决的线程中找到问题的答案。所以,这是我第一次在我目前的程序中找不到So的有效答案。但是,如果我只是错过了,请对我好^^

有一点上下文可以解释为什么我不能设法应用任何给定的解决方案,尽管存在许多关于这方面的线程。。。我正在做:

  • HTA接口
  • 带有本地文本文件的iframe
  • 还有一个指向js文件的链接,我想用它每500ms刷新一次iframe

目标是聊天;人们可以在文本文件上书写,它会自动出现在HTA界面上。

坦率地说,我对JS一无所知。所以我在这里找到了一段刷新iframe的代码。

window.setInterval(function() {
document.getElementById('chatbox').contentWindow.location.reload();
}, 500);

它是有效的,但刷新iframe后,它会滚动回顶部;这使得聊天无法阅读,正如你所猜测的。我在SO上读到的许多解决方案对我来说都不起作用,可能是因为它不适合这种刷新iframe的方式,也不适合HTA,或者我对js太笨了,不知道如何让它们起作用。

如果有人有一个我可以复制和使用的解决方案,即使我不明白自己在做什么——这在智力上不会很令人满意,但至少我可以专注于完成我的界面:(非常感谢!

如果通过从文本文件更新innerHTML来刷新iframe,而不是重新加载,则不会更改滚动位置。以下是一个示例HTA:

<!DOCTYPE html>
<meta http-equiv="x-ua-compatible" content="ie=9">
<html>
<head>
<script>    
function Refresh() {
var Iframe = document.getElementById("chatbox").contentWindow;
window.setInterval(function() {
var fso = new ActiveXObject("Scripting.FileSystemObject");
var fh = fso.OpenTextFile(".\Chat.txt",1);
var FileContents = fh.AtEndOfStream ? "" : fh.ReadAll();
fh.Close();
Iframe.document.body.innerHTML = "<pre>" + FileContents + "</pre>"
}, 500);
}
</script>
<style>
#chatbox {height:30em;}
</style>
</head>
<body onload="Refresh()">
<iframe id=chatbox title="Chat Box">
</iframe>
</body>
</html>

最新更新