需要通过JavaScript访问本地文本文件

时间:2014-10-06 20:31:24

标签: javascript html5 local-storage

我正在开发一个项目,该项目必须是自包含的,并且能够在没有互联网连接的情况下运行。它是用于视频演示,我需要导入一个.txt文件,其中包括章节和循环信息,如章节标题,循环点和章节结束点(都在帧中)。但是,没有客户端包含脚本来包含文本文件。

对于我来说,存储或访问本地文本文件的最佳方式是什么,以便我可以迭代它并构建我的章节对象? HTML5本地存储?通过包含加载文本文件的隐藏iframe进行黑客攻击然后通过JavaScript获取该主体内容?对此问题的任何帮助将不胜感激。

谢谢!

2 个答案:

答案 0 :(得分:3)

对于您的问题"需要通过JavaScript访问本地文本文件"与此问题非常相似:Local file access with javascript

如果你在浏览器中使用javascript,答案是不是一个访问本地文件的好方法。如果它只是一个没有http / web服务器的同一台机器上的文本文件,你可能会遇到一些问题,就像在javascript中一样,大多数浏览器默认禁用读取本地文件的能力。在chrome中,您可以通过在命令行启动浏览器时添加以下标志来禁用此安全功能。

- disable-web-security

如果您的数据是jsonxmlcsv的结构,那么如果文件托管在可通过HTTP访问的服务器上,则可以使用AJAX call将其引入。不使用http ajax调用,如上面的问题链接中提到的另一种可能的解决方案:

  

只是更新HTML5功能http://www.html5rocks.com/en/tutorials/file/dndfiles/   这篇优秀的文章将详细解释本地文件访问的详细信息   的JavaScript。上述文章摘要:

     

规范为accessing files from a 'local' filesystem:

提供了几个接口      

文件 - 单个文件;提供只读信息,如姓名,   文件大小,mimetype和对文件句柄的引用。 FileList - 一个   类似于数组的File对象序列。 (在桌面上思考或拖动文件目录)。 Blob -   允许将文件切片为字节范围。    - @Horst Walter

如下图所示,您可以进行"文件上传"输入选择,只需将文件路径作为输入的默认选项"

<input type="file" id="files" name="files[]" multiple />
<output id="list"></output>

<script>
  function handleFileSelect(evt) {
    var files = evt.target.files; // FileList object

    // files is a FileList of File objects. List some properties.
    var output = [];
    for (var i = 0, f; f = files[i]; i++) {
      output.push('<li><strong>', escape(f.name), '</strong> (', f.type || 'n/a', ') - ',
                  f.size, ' bytes, last modified: ',
                  f.lastModifiedDate ? f.lastModifiedDate.toLocaleDateString() : 'n/a',
                  '</li>');
    }
    document.getElementById('list').innerHTML = '<ul>' + output.join('') + '</ul>';
  }

  document.getElementById('files').addEventListener('change', handleFileSelect, false);
</script>

答案 1 :(得分:2)

您可以使用AJAX读取文本文件。
使用javascript你无法编辑,你只能阅读它。
一个例子是:
1-创建一个文本文件“page.txt”
2-使用此代码创建一个html页面

<!DOCTYPE html>
<html>
<body>
<script>
    text = new XMLHttpRequest();
    text.open("GET","page.txt",false);
    text.onload = function(){
        document.write(text.responseText);
    }
    text.send();
</script>
</body>
</html>