7

我想用 FileSystemObject 读取文件。我的代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
<title>Read json</title>
</head>

<body>
<script type="text/javascript">

function readFile(filename){
    var fso = new ActiveXObject("Scripting.FileSystemObject");
    var ForReading = 1;
    var f1 = fso.OpenTextFile(filename, ForReading);
    var text = f1.ReadAll();
    f1.close();
    return text;
}

myJSONText = "text.txt";
var myObject = readFile(myJSONText);//eval('(' + myJSONText + ')');

document.write(myObject.name);
</script>
</body>
</html>
4

1 回答 1

6

首先,让我重复上面的一些评论。我从来没有见过使用 ActiveXObject 客户端被称赞为应该做的事情。

现在,让我说我正在尝试自己学习如何做到这一点。这里有一些关于这个问题的想法(和有用的链接,见底部)。

根据 MSDN脚本诊所专栏上的“Much ADO about Text Files”,总体布局是:

  1. 创建对象。
  2. 使用第一个对象创建另一个对象,该对象使用第一个对象的方法(例如获取文件)。
  3. 对文件做一些事情。
  4. 关闭文件。

你如何开始?根据 IE Dev Center(在此处链接),在 Javascript 中使用 ActiveXObject,如下所示:

newObj = new ActiveXObject(servername.typename[, location])

当您fso在代码中声明时,您就知道了。这个“servername”的东西呢,不是本地访问的文件吗?而不是“服务器名称等”你已经放入Scripting.FileSystemObject. 这实际上很好,如果主机 PC 上的 HKEY_CLASSES_ROOT 注册表项支持它(参见上面的参考)。

一旦 ActiveXObject 被成功声明,并且浏览器允许(仅限 IE),并且最终用户同意弹出的任何警告(“此页面上的 ActiveX 控件可能不安全与页面的其他部分交互。 ..”等),那么该对象允许您使用与该对象关联的任何方法。这就是 Windows Scripting FileSystemObject 发挥作用的地方。

现在可以使用任何 FileSystemObject (fso) 方法,顾名思义,这意味着本地计算机上的文件(和目录)交互。不仅仅是阅读,因为你的问题是关注的,还有写作删除此处的 MSDN 提供了方法和属性的完整列表。使用后,使用.close()方法关闭文件。

因此,出于显而易见的原因,这是危险的。但起初对我来说并不明显的是,这些与文件系统的交互可能会无形地发生。很有可能无论您做什么,从读取文件到删除目录树,都不会出现警告或命令提示符来让您知道由于您的几行代码而发生的事情。

最后让我评论一下上面的最后一段代码。将 JSON 与从 FileSystemObject 提取的数据结合使用提供了一种允许 JavaScript 交互的好方法(立即想到JSON .parse 和 .stringify )。有了这个,数据可以存储在本地,也许可以作为 HTML5 本地存储的替代方案(参考这个 SO 线程,它更深入地介绍了这个概念,以及我在这里提出的另一个 SO 问题)。

以下是一些进一步阅读的链接:
IE Dev Center、JavaScript Objects、ActiveXObject
MSDN JScript Windows Scripting(包括 FileSystemObject 方法等)
MSDN Scripting Clinic(较早的文章,许多断开的链接,但仍然有很多关于这些东西的好信息)

于 2014-08-08T15:52:51.240 回答