网页设计学习笔记

HTML,CSS,JavaScript

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: :: 管理 ::

更新:大部分浏览器的最新版本都支持通过 FileReader 来打开本地文件,具体方法见这里

为着安全起见,在 JavaScript 中是不允许直接访问本地文件的。但有时候又需要打开和保存本地文件,在目前的情况之下就只能用一些特殊的方法来实现了。最麻烦的是,这些方法大多都不能适 用于各个主要浏览器,很费事但也只能如此。这一篇总结一下各种打开本地文件的方法,下一篇总结保存本地文件的方法。

首先是 IE 浏览器。IE 有自己独有的 ActiveX,实现文件的是容易的。在下面的例子中,首先选择好要打开的文件路径名,点击"Read"按钮后将把该文件的内容读入 textarea 区域:

<html>
<body>
<input type="file" id="fileid">
<button onclick="doRead()">Read</button>
<textarea id="areaid">hello this!</textarea>
<script type="text/javascript">
    // works in ie 6
    var myfile = document.getElementById("fileid");
    var myarea = document.getElementById("areaid");
    /* myfile.click(); */
    function doRead() {
        var filename = myfile.value;
        var fso = new ActiveXObject("Scripting.FileSystemObject");
        var tempfile = fso.OpenTextFile(filename, 1);
        var data = tempfile.ReadAll();
        myarea.value = data;
        tempfile.Close();
    }
</script>
</body>
</html>

注意其中IE将弹出警告窗口要求你确认。

接下来我们来看在 Firefox 中有什么方法可以实现文件的读取。Firefox 自己扩展了文件选择按钮的功能,因此用下面的代码可以实现本地文件的打开:

<html>
<body>
<input type="file" id="fileid">
<button onclick="doRead()">Read</button>
<textarea id="areaid">hello this!</textarea>
<script type="text/javascript">
    // works in firefox 3
    var myfile = document.getElementById("fileid");
    var myarea = document.getElementById("areaid");
    /* myfile.click(); // works in firefox 4 and beyond */
    function doRead() {
        var tempfile = myfile.files[0];
        var data = tempfile.getAsText("utf8");
        myarea.value = data;
    }
</script>
</body>
</html>

看起来比IE情形要简单一些,不过上面这些函数在 Firefox 中已经标记为废弃的,在以后可能会被去掉。如果只是在本地网页中读取本地文件,在 Firefox 中还可以用[5]中的方法。

参考资料:

[1] MSDN - OpenTextFile Method
[2] File - MDC Docs
[3] FileReader - MDC Docs
[4] Using files from web applications - MDC Docs
[5] File I/O - MDC Docs
[6] HTML5中File对象初探 | JS Mix

[YAML] Date: 2011-05-26 18:00:52, Update: 2012-05-27 12:30:00

posted on 2012-04-04 18:31  zoho  阅读(4938)  评论(0编辑  收藏  举报