【问题标题】:Javascript Access to File on local machineJavascript访问本地机器上的文件
【发布时间】:2014-04-28 09:29:29
【问题描述】:

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

当我尝试使用 window.open 访问文件时,出现错误“访问被拒绝。

有人可以帮助在 Internet Explorer 8.0 中实现这一要求吗?

谢谢!

【问题讨论】:

    标签: javascript file


    【解决方案1】:

    你不能。并为此感谢上帝。想象一下,如果 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 应该会打开内容。
    • @user3463768:你不能。您无法使用window.open 打开客户端磁盘上的文件。您可以使用window.open 做的唯一事情是window.open('file://<absolute path to file here>');。但不能保证会奏效。 JS 是通过网络发送到客户端的代码。如果允许它随意访问本地文件,那将是非常不安全的。你真的应该寻找其他方法来做你想做的任何事情
    • 如果您尝试加载由您的计算机托管的 HTML 文件,则 window.open('http://127.0.0.1/dirname/file.ext') 可以工作,但这需要您运行服务器
    • 这个有什么选择吗?我的文件将存储在本地系统上。我正在使用 HTML 文件上传控件从本地系统读取文件并在用户从文件系统浏览后单击添加按钮时在网格中显示路径。所以我们在网格中显示文件的路径。用户选择网格中的路径并单击打开按钮。该文件应打开或应要求保存。您认为我们可以通过其他方式实现此要求吗?
    • @user3463768:听起来你在选择 JavaScript 时找错了方向。您正在谈论上传文件,这意味着服务器端技术。我会使用 AJAX + 你在服务器上使用的任何服务器端语言
    【解决方案2】:

    我添加这个答案只是为了完整,但就网页而言,Elias Van Ootegem 的答案是正确的:您不能(也不应该)访问本地硬盘。

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

    HTML Application wiki

    这本质上是一个以 .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");
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-09-27
      • 1970-01-01
      • 2011-12-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多