Javascript访问本地计算机上的文件

时间:2014-04-28 09:29:29

标签: javascript file

我想使用window.open()打开位于本地驱动器上的文件。

当我尝试使用window.open访问该文件时,我收到错误" 访问被拒绝。"

有人会帮助在Internet Explorer 8.0中实现此要求吗?

谢谢!

2 个答案:

答案 0 :(得分:2)

你做不到。感谢上帝。想象一下,如果JS能够访问客户端的文件系统,互联网将会有多么不安全 当然,IE8具有MS特定的JScript超集(ActiveXObject),它可以启用文件系统访问:

var fileHandle,
    fs = new ActiveXObject("Scripting.FileSystemObject");
fileHandle = fs.OpenTextFile("C:\\path\\to\\file.tmp", 1, true);
fileHandle.Write('This is written to a file');
console.log(fileHandle.ReadLine());//will log what we've just written to the file

但这是非标准的,我认为 - 不再支持,并且不适用于X浏览器 这是the documentation。在底部有一个链接,可以更详细地概述此对象提供的属性和方法,as you can see, there's a lot to choose from

答案 1 :(得分:1)

我添加这个答案只是为了完整,但就网页而言,Elias Van Ootegem的答案是正确的:你不能(并且不能这样做) to)到达本地硬盘。

但是..你可以在你的页面是HTA(HTML应用程序):

HTML Application wiki

这实际上是一个网页,其中.hta作为扩展名(通常)和一些额外的标签告诉IE它是HTA应用程序,而不是网页。

这是通过Windows操作系统运行的东西,据我所知,只有IE可用。 HTA应用程序在IE中作为网页打开,但没有通常的Web导航/收藏夹工具栏等。

请注意,如果您在作为HTA应用程序提供的互联网服务器上有一个页面,您可能会弹出病毒扫描程序和防火墙,因为这可能会运行一个可能对您的计算机做很多事情的脚本。根本不适用于一般的internert内容,但在安全的环境中可能很有用,例如内部网,其中已知应用程序的源是安全的。

要进入文件系统,您可以使用以下javascript代码:

// set up a Fils System Object variable.. 
var FSO = new ActiveXObject("Scripting.FileSystemObject");


// function to read a file
function ReadFile(sFile) {

var  f, ts;
var s="";
if(FSO.FileExists(sFile))
{
    f = FSO.GetFile(sFile); 
    ts = f.OpenAsTextStream(ForReading, TristateUseDefault); 
    if (!ts.AtEndOfStream) {s = ts.ReadAll( )}; 
    ts.Close( ); 
}
return s; 
}


alert(ReadFile("c:\\somefilename.txt");