如何从本地运行的html + javascript页面访问和读取本地文件

时间:2011-06-18 15:10:16

标签: javascript html html5

我想写一个小的html文件,它会在本地运行并操作我的计算机上的一个小文本文件。我的要求是:

  • 文本文件位于我的计算机上的目录(test.txt)
  • Html文件与文本文件(test.html)
  • 位于同一目录中
  • 我想在html中使用javascript来读写文本文件。

这有可能吗?如果是,我如何使用javascript读取和写入我的文本文件?

4 个答案:

答案 0 :(得分:8)

正如在Itay Moav的回答中所讨论的那样,使用本地HTML文件写入本地文件可能会成为一个问题,而无需在提升的权限模式下运行并具有其他Javascript功能(允许您保存本地文件)

但是,完全可以从HTML文件访问本地文件。下面是一些示例代码。

<强> mytext.txt

My local text file

<强> local.html

<html>
<head>
<base href="file:///C:/path/to/your/folder/"/>
<script>
window.onload = function(){
    var iframe = document.createElement('iframe');
    iframe.id = 'iframe';
    iframe.style.display = 'none';
    document.body.appendChild(iframe);
    iframe.src = 'mytext.txt';
    setTimeout(function(){
        var text = document.getElementById('iframe').contentDocument.body.firstChild.innerHTML;
        alert(text);
    }, 1000);
}
</script>
</head>
<body>
<h1>Hello World!</h1>
</body>
</html>

这将在html页面加载后1秒发出警报(以允许首先加载iframe),并将包含mytext.txt文件中的内容。

注意,如果它是纯文本,Firefox会用PRE元素包装它,这就是我firstChild的原因。另外,请注意使用BASE元素,该元素使用您的文件指向您的本地目录。

答案 1 :(得分:8)

Jared给出的例子很好。然而,设置未知的观看时间并不吸引人。而是将一个onload事件附加到iframe,调用一个函数来读取文本文件的内容,尽快做任何事情。

这是一个修改过的例子:

<html>
<head>
<script>
function readfile() {
    alert(document.getElementById('iframe').contentDocument.body.firstChild.innerHTML);
}
</script>
</head>
<body>
<iframe id='iframe' src = 'test.txt' onload='readfile()'> </iframe>
<h1>Hello World!</h1>
</body>
</html>

文件test.txt off course必须与上面的html文件本身存在于同一目录中。

答案 2 :(得分:3)

通常情况下,这是不可能的,也是一个安全问题 但是,如果您使用某些插件(ActiveX,FF扩展等),它们可能会使您这样做 您还可以使用最新浏览器使用本地存储主题。

从您的评论中,我想知道为什么不使用PHP / Ruby任何其他服务器端语言来这样做?它们专为此而量身定制。

答案 3 :(得分:1)

您还可以使用hta文件扩展名,它会在您有权访问ActiveX对象的IE中加载。紧要关头,您可以非常轻松地快速启动并运行可执行程序。

相关代码为:

<!DOCTYPE html>
<html>
    <head>
        <HTA:APPLICATION
             ID="somethingHere"
             APPLICATIONNAME="YouAppsName"
             WINDOWSTATE="maximize"
        >
         <script language="JScript">
        function ReadFile(filename) {
            try {
                var fso  = new ActiveXObject("Scripting.FileSystemObject");
                var fh = fso.OpenTextFile(filename, 1);
                var contents = fh.ReadAll();
                fh.Close();
                return contents;
            } catch (Exception) {
                return "Cannot open file :(";
            }
        function WriteFile(filename, text) {
            try {
                var fso  = new ActiveXObject("Scripting.FileSystemObject");
                var fh = fso.OpenTextFile(filename, 8, true);
                fh.Write(text);
                fh.Close();
            } catch(Exception) {
                alert("Failed to write.");
            }
        }
            .....
    </script>
    etc.....