根据本网站上的其他答案,我已经觉得我知道这个问题的答案,但是,由于它略有不同,我想问一下。
是否可以从机器上本地运行的JavaScript访问本地文件(AKA,我的网站地址将是file:/// C:/ ...)?或者,这个沙盒也是吗?
我想做的事情:我有一台独立的计算机,我希望人们能够将JSON或XML文件放入本地文件夹中,这些文件夹在创建站点时读入并用于生成单个Web页。如果无法使用JavaScript解决方案,您能提供任何其他建议吗?
谢谢。
答案 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中对我有用......
<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)
答案 9 :(得分:-5)
是的,虽然不安全,但您可以使用:
fopen("c:\\MyFile.txt", 'r');