2014-10-06 80 views
1

我正在研究一個項目,該項目必須是自包含的並且能夠在沒有互聯網連接的情況下運行。這是用於視頻演示文稿,我需要導入一個.txt文件,其中包含章節和循環信息,例如章節標題,循環點和章節終點(均在框架中)。但是,沒有客戶端包含腳本來包含文本文件。需要通過JavaScript訪問本地文本文件

什麼是最好的方式來存儲或訪問本地文本文件,以便我可以遍歷它並構建我的章節對象? HTML5本地存儲?通過加入隱藏的iframe來加載文本文件,然後通過JavaScript獲取該內容內容,從而進行黑客攻擊?任何有關這個問題的幫助將不勝感激。

謝謝!

+0

一個默認選項如果您正在運行的應用程序從本地文件中,許多瀏覽器提供了一些通過ajax訪問本地文件系統的方式。 – Bergi 2014-10-06 21:28:19

+0

文件上傳是可以接受的,還是需要在加載應用程序時在後臺讀取文件? – Bergi 2014-10-06 21:29:00

+0

看來你在做什麼是拉數據顯示的目的。這些數據是如何存儲的? – 2014-10-06 23:13:33

回答

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> 
+2

問題指出解決方案必須在沒有互聯網連接的情況下工作。這裏AJAX的目的是什麼? – lxg 2014-10-06 20:37:17

+1

我們不需要互聯網來使用Ajax。 – 2014-10-06 20:45:33

+0

同意,但您使用AJAX訪問哪些資源? AJAX需要一臺服務器,並且在上述場景(「獨立式」)中沒有服務器。 – lxg 2014-10-06 20:48:08

3

對於你的問題「需要通過訪問本地文本文件JavaScript「與此問題非常相似:Local file access with javascript

答案是真的不存在訪問本地文件的好方法,如果您在瀏覽器中使用javascript。如果它只是一個沒有http/web服務器的同一臺機器上的文本文件,你可能會遇到一些問題,如在javascript中,大多數瀏覽器默認禁用讀取本地文件的功能。在Chrome中,您可以通過從命令行啓動瀏覽器時添加以下標誌來禁用此安全功能。

- 禁用網絡安全

如果你的數據是結構化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> 
+0

在做了一些閱讀後,我認爲這應該工作。有沒有什麼辦法可以讓我動態地將文件名傳遞給handleFileSelect,而不是通過文件輸入來觸發它? – Yuschick 2014-10-07 15:20:24

相關問題