2009-12-14 59 views
10

根据本网站上的其他答案,我已经觉得我知道这个问题的答案,但是,由于它稍有不同,我想问一下。使用本地Javascript访问本地文件

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

我在做什么:我有一台独立的计算机,我希望人们能够将JSON或XML文件放入本地文件夹,这些文件夹在创建网站时读入并用于生成单个文件网页。如果JavaScript解决方案不可行,您是否可以提供其他建议?

谢谢。

+1

你为什么不只是尝试一下,看看它是否工作? – jdigital

回答

5

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

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

+0

从你的文章中,我认为没有”通用“的方式来读取文件?(甚至使用插件如Flash?) – JasCav

0

如果有人要将json字符串放入一个文件夹中,那么您可以将其设置为纯文本文件,然后使用AJAX调用文件名,就像将它指向php/asp脚本。我在进行后端测试之前一直都在测试页面。

I.E.如果你的网页是C:\ foo \ index.html,你可以让它们在这里下载到C:\ foo \ putyourstuff \ json.txt并运行一个AJAX调用“putyourstuffhere/json.txt”。

1

IF用户授予您的网页权限访问这些文件,并IF他们位于同一台机器的网页上,那么就没有什么阻止你获得阅读的文件上唯一访问机器通过JavaScript。

0

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

-5

是的,虽然没有安全感,你可以使用:

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

在哪个浏览器中可以运行该代码? – Marius

+2

对不起,这不是一个标准功能,我用了一个很长的自定义函数“fopen”,很抱歉。 http://phpjs.org/functions/fopen:774 – jbnunn

-4

你应该考虑某种形式的服务器端脚本语言这样的SSJS一个PHPPerlJSP或某种形式。

0

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

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

+4

重要的是要指出,虽然HTA可以是一个伟大的应用程序,它也是一个MS技术,并限于Windows/IE – Josh

+0

这就是说...如果你知道你只会在Windows/IE上使用它,那么HTA可能是一个非常好的选择。 – Josh

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

+0

这是帮助我。非常感谢:“)。 – ameliapond

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页面内有效。而且我不知道这是否会在其他浏览器中起作用。

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>