【发布时间】:2014-04-28 09:29:29
【问题描述】:
我想使用 window.open() 打开位于本地驱动器上的文件。
当我尝试使用 window.open 访问文件时,出现错误“访问被拒绝。”
有人可以帮助在 Internet Explorer 8.0 中实现这一要求吗?
谢谢!
【问题讨论】:
标签: javascript file
我想使用 window.open() 打开位于本地驱动器上的文件。
当我尝试使用 window.open 访问文件时,出现错误“访问被拒绝。”
有人可以帮助在 Internet Explorer 8.0 中实现这一要求吗?
谢谢!
【问题讨论】:
标签: javascript file
你不能。并为此感谢上帝。想象一下,如果 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
【讨论】:
window.open 打开客户端磁盘上的文件。您可以使用window.open 做的唯一事情是window.open('file://<absolute path to file here>');。但不能保证会奏效。 JS 是通过网络发送到客户端的代码。如果允许它随意访问本地文件,那将是非常不安全的。你真的应该寻找其他方法来做你想做的任何事情
window.open('http://127.0.0.1/dirname/file.ext') 可以工作,但这需要您运行服务器
我添加这个答案只是为了完整,但就网页而言,Elias Van Ootegem 的答案是正确的:您不能(也不应该)访问本地硬盘。
但是 .. 你可以确定你的页面是 HTA(HTML 应用程序):
这本质上是一个以 .hta 作为扩展名的网页(通常)和一些额外的标签来告诉 IE 它是一个 HTA 应用程序,而不是一个网页。
这是通过 Windows 操作系统运行的东西,据我所知仅适用于 IE。 HTA 应用程序在 IE 中作为网页打开,但没有通常的网络导航/收藏夹工具栏等。
请注意,如果您在 Internet 服务器上有一个页面作为 HTA 应用程序交付,您可能会弹出病毒扫描程序和防火墙,因为这实际上是在运行一个脚本,该脚本可以对您的计算机执行很多操作。根本不适合一般的互联网内容,但在已知应用程序源安全的内部网等安全环境中可能很有用。
要访问文件系统,您可以使用这样的 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");
【讨论】: