【问题标题】:HTA Vbscript FileSystemObject and DOMHTA Vbscript FileSystemObject 和 DOM
【发布时间】:2013-06-22 02:30:18
【问题描述】:

以下是原型代码,我编写该代码是为了将特定文件夹中存在的文本文件的内容放入 .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>

【问题讨论】:

  • 你确定“什么都没发生”吗?似乎至少可能有一个脚本错误消息。
  • 是的,当我运行上面的代码时,什么也没发生,甚至没有错误消息。

标签: dom vbscript hta


【解决方案1】:

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

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

  1. 将脚本块移动到文档末尾,就在关闭 &lt;/body&gt; 标记之前:

    <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>
    

【讨论】:

  • 初始化代码应该进入一个过程Sub Window_onLoad。
【解决方案2】:

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

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

以上没有意义。您将Object 设置为变量objDiv,并在下一行立即用String 覆盖此变量。

无论如何,在ReadAll 之后你的TextStream 已经到达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

【讨论】:

  • 1. Cheran Shunmugavel 关于脚本标签位置的建议也同样有用。 2.哦,那个DO。 . LOOP 只是为了展示我用来在 HTA 文档中获取文本文件内容的方法之一。 3.我做错的是使用错误的分配方法,正如Panayot Karabakalov和脚本标签的位置所指出的那样。脚本标签应该在 body 标签之后,或者我应该使用 window.onload 方法。 4. 是的,现在可以工作了。
猜你喜欢
  • 2011-12-25
  • 2012-01-22
  • 1970-01-01
  • 1970-01-01
  • 2011-07-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多