我想使用window.open()打开位于本地驱动器上的文件。
当我尝试使用window.open访问该文件时,我收到错误" 访问被拒绝。"
有人会帮助在Internet Explorer 8.0中实现此要求吗?
谢谢!
答案 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应用程序):
这实际上是一个网页,其中.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");