使用本地Javascript访问本地文件

时间:2009-12-14 22:28:41

标签: javascript

根据本网站上的其他答案,我已经觉得我知道这个问题的答案,但是,由于它略有不同,我想问一下。

是否可以从机器上本地运行的JavaScript访问本地文件(AKA,我的网站地址将是file:/// C:/ ...)?或者,这个沙盒也是吗?

我想做的事情:我有一台独立的计算机,我希望人们能够将JSON或XML文件放入本地文件夹中,这些文件夹在创建站点时读入并用于生成单个Web页。如果无法使用JavaScript解决方案,您能提供任何其他建议吗?

谢谢。

10 个答案:

答案 0 :(得分:5)

网页可以读取与加载时相同的服务器上的任何文件(这是JavaScript的跨站点策略)。这意味着页面文件:/// C:/mywebsite/index.html可以读取文件file:// C:/somedir/somefile.xml。要读取此文件,请使用ajax,将其加载到iFrame中或将其加载为javascript或css文件。

有几个浏览器支持加载本地文件(以及其他有趣的东西)的自定义方法,IE有activeX,Firefox有XPCOM。

答案 1 :(得分:5)

根据the Firefox documentation,以下代码将起作用:

var req = new XMLHttpRequest();  
req.open('GET', 'file:///home/user/file.json', false);   
req.send(null);  
if(req.status == 0)  
  dump(req.responseText);

我似乎记得它只能在与HTML页面相同的目录中运行。我不知道这是否适用于其他浏览器。

答案 2 :(得分:2)

这只适用于IE,但如果这对你来说不是问题,这里有一些示例代码可以写入文件:

    var fso, s;
    fso = new ActiveXObject("Scripting.FileSystemObject");
    s = fso.OpenTextFile("c:\\path\\to\\myfile.txt" , 8, 1, -2);
    s.writeline("Hello World");
    s.Close();

然后从中读取:

f = fso.OpenTextFile(filename, ForReading);
while (!f.AtEndOfStream) {
    var r = f.ReadLine();
    document.write (r + "<br />");
}
f.Close();

有关OpenTextFile的更多信息,请查看:http://msdn.microsoft.com/en-us/library/314cz14s(VS.85).aspx

答案 3 :(得分:1)

如果,用户授予您访问这些文件的网页权限,并且 IF 它们与网页位于同一台计算机上,则无法阻止您获取这些文件只读通过JavaScript访问计算机上的文件。

答案 4 :(得分:0)

如果人们要将json字符串放入文件夹中,您可以将其作为纯文本文件,然后使用对文件名的AJAX调用,就像您将其指向php / asp脚本一样。在我完成后端之前,我一直这样做测试页面。

即。如果您的页面是C:\ foo \ index.html,您可以将它们放到C:\ foo \ putyourstuff \ json.txt这里并运行一个AJAX调用“putyourstuffhere / json.txt”。

答案 5 :(得分:0)

您只需使用Ajax请求即可读取文件,就好像它是服务器一样。但是你必须知道文件的名称,而且你不能写文件。

答案 6 :(得分:0)

如果您创建超文本应用程序页面(.hta)而不是HTML页面(.htm / .html),那么您可以使用FileSystemObject对象完全访问文件系统。

(当然,受到运行浏览器的用户帐户的文件访问限制。)

答案 7 :(得分:0)

这在Firefox中对我有用......

来自此网站的改编代码:http://www.h-online.com/security/services/Firefox-Mozilla-Demo-Reading-local-files-via-local-HTML-files-761851.html

<HTML>

<BODY onLoad="ReadFileContent()" >

<iframe id="local_file" name="local_file" 
    src="file:///C:/test.txt"
    height=0 width=0>
</iframe>

<script>

function ReadFileContent(){

alert(local_file.document.firstChild.innerHTML);

}

</script>

<h2>Read Local File</h2>

<P>
If a window displays the content of your local file C:\test.txt
the demo worked. If no additional window appears, it failed. You can
close this window now.</p>

</body>

</html>

答案 8 :(得分:-4)

您应该考虑某种服务器端脚本语言,例如PHPPerlJSP或某种形式的SSJS

答案 9 :(得分:-5)

是的,虽然不安全,但您可以使用:

fopen("c:\\MyFile.txt", 'r');