0

下面是原型代码,我正在编写它以将特定文件夹中存在的文本文件的内容放入 .hta 文档的 div 中。
使用 document.write 我可以轻松地在文档上书写,但我想将文本文件的内容写入特定的 div。
当我尝试运行代码时,没有任何反应。

<html>
<head>
<title>Notes</title>
<script language="vbscript">
Set fso = CreateObject("Scripting.FileSystemObject")
FileName = "C:\Documents and Settings\anamdev\Desktop\demo.txt"
Set fileObj = fso.GetFile(FileName)
Set ts = fileObj.OpenAsTextStream(1, -2)
Set objDiv = Document.getElementById("content")
objDiv = ts.ReadAll
Do While ts.AtEndOfStream <> True
    TextLine = ts.ReadLine
    Document.getElementById("content").innerHtml TextLine & "<br />"
Loop
ts.Close
</script>
</head>
<body>
<span id="head"></span>
<input type="button" value="Previous" name="pre" />
<input type="button" value="Next" name="nxt" />
<hr>
<div id="content">
</div>
</body>
</html>
4

2 回答 2

4

问题是您的代码在<script>页面被解析时被执行。这意味着在脚本运行时,“内容”元素不存在。我希望您实际上得到一个“需要对象”错误,无论出于何种原因都没有显示。

至少有两种方法可以解决这个问题:

  1. 将脚本块移动到文档的末尾,就在关闭</body>标记之前:

    <html>
    <head>
    <title>Notes</title>
    </head>
    <body>
    <span id="head"></span>
    <input type="button" value="Previous" name="pre" />
    <input type="button" value="Next" name="nxt" />
    <hr>
    <div id="content">
    </div>
    
    <script language="vbscript">
    Document.getElementById("content").innerHtml = "Hello!"
    </script>
    </body>
    </html>
    
  2. 将初始化代码包装在一个子例程中并从window对象的onload事件处理程序中调用它:

    <html>
    <head>
    <title>Notes</title>
    <script language="vbscript">
    Sub Init
        Document.getElementById("content").innerHtml = "Hello!"
    End Sub
    
    Set window.onload = GetRef("Init")
    
    'Alternatively, you could do this to the <body> element:
    '  <body onload="Init()">
    </script>
    </head>
    <body>
    <span id="head"></span>
    <input type="button" value="Previous" name="pre" />
    <input type="button" value="Next" name="nxt" />
    <hr>
    <div id="content">
    </div>
    </body>
    </html>
    
于 2013-06-22T06:28:28.463 回答
3

Cheran Shunmugavel 的答案是正确的 (+1),我只会附加一些我在代码中看到的其他问题。

Set objDiv = Document.getElementById("content")
objDiv = ts.ReadAll

以上没有意义。您设置一个Objectto 变量并立即在下一行objDiv覆盖此变量。String

无论如何,在ReadAllTextStream已经达到 EOF 之后,所以下一个循环什么都不做:

Do While ts.AtEndOfStream <> True
    TextLine = ts.ReadLine
    Document.getElementById("content").innerHtml TextLine & "<br />"
Loop

作业也错了。

Object.Property Value   'incorrect
Object.Property = Value 'correct

简而言之,你可以这样:

Set objDiv = Document.getElementById("content")
objDiv.innerHtml = ts.ReadAll
ts.Close
于 2013-06-22T07:45:33.083 回答