我想用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>
答案 0 :(得分:5)
首先,让我重复上面的一些评论。 我从未见过使用ActiveXObject客户端作为应该完成的事情。
现在,让我说我正在努力学习如何自己做这件事。以下是关于这个问题的一些想法(以及有用的链接,见底部)。
根据MSDN scripting clinic column上的“关于文本文件的大量ADO”的总体布局是:
你是如何开始的?根据IE开发中心(链接here),在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 here提供了完整的方法和属性列表。使用后,使用.close()
方法关闭文件。
因此,出于显而易见的原因,这很危险。但一开始并不明显的是,这些与文件系统的交互可能会发生不可见。很有可能无论你做什么,从阅读文件到删除目录树,都不会出现任何警告或命令提示,让你知道发生了什么,因为你的代码很少。
让我先评论一下上面的代码。将JSON与从FileSystemObject中提取的数据结合使用,提供了一种允许JavaScript交互的好方法(JSON .parse and .stringify立即浮现在脑海中)。有了这个,数据可以存储在本地,可能作为HTML5本地存储的替代(ref this SO thread,这与这个概念更加深入,以及我提出的关于这个here的另一个SO问题)。
以下是一些进一步阅读的链接:
IE Dev Center, JavaScript Objects, ActiveXObject
MSDN JScript Windows Scripting(包括FileSystemObject方法等)
MSDN Scripting Clinic(较旧的文章,许多断开的链接,但在这些内容上有很多好的信息)