簡體   English   中英

需要幫助閱讀位於同一目錄中的Javascript文件

[英]Need help reading a file in Javascript located in the same directory

我編寫了此函數,以嘗試讀取與Javascript文件和index.html文件位於同一目錄中的文件。 我以前從文件中讀取過文件,但是通常我可以讓用戶自己選擇文件,因此我從來不必創建實際的文件對象。

有誰知道為什么下面的代碼不起作用?

  function getFile()
  {
    var reader=new FileReader();
    var file=new File("input.txt");
    var str=reader.result;
    reader.readAsText(file);
    return str;
  }

更新:

一些其他信息(如果我不回答您的問題,我深表歉意,對此我真的很陌生,我所知道的一切都是自學成才的)。

服務器端還是客戶端? 我認為這將在服務器端托管-我有一個域要將文件上傳到該域。

由於安全限制,無法執行。 您必須使用用戶選擇的文件。 想象一下,如果javascript可以讀取您硬盤上的任何文件,該怎么辦-噩夢!

對於用JS編寫的桌面應用程序,我有類似的代碼。 在IE和FF上運行良好,直到Chrome出現為止(是的,這是很久以前的事情了!),並開始對沙盒進行更多限制。 在某些時候,IE和FF還加強了權限,該方法不再起作用(我使用了不再起作用的這段代碼):

try {
  netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");

  file = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);
  file.initWithPath(filename);

  if (file.exists())
  {
    inStream = Components.classes["@mozilla.org/network/file-input-stream;1"].createInstance(Components.interfaces.nsIFileInputStream);
    inStream.init(file, 0x01, 00004, null);
    sInStream = Components.classes["@mozilla.org/scriptableinputstream;1"].createInstance(Components.interfaces.nsIScriptableInputStream);
    sInStream.init(inStream);
    content = sInStream.read(sInStream.available());
  }
} catch (ex) {
  // and so on...
}

在某些時候,FF和Chrome具有一些啟動標志,這些標志使沙盒不受某些安全限制的約束,但最后我意識到這只是舊代碼。

今天,我使用localStorage將數據存儲在本地計算機上。 唯一的缺點是必須實現導入/導出功能,以便通過復制/粘貼原始文本將其移植到其他瀏覽器/計算機上。

我要做的就是這個。 據說數據庫的最大大小約為10 MB(但已知存在偏差),我存儲的只是一個JSON字符串:

function store(data)
{
  localStorage.data = JSON.stringify(data);
}

function retrieve()
{
  return JSON.parse(localStorage.data);
}

顯然,這兩個函數過於簡化,您需要處理一些極端情況,例如不存在數據或導入非JSON字符串時。 但是,我希望您對如何在現代瀏覽器上存儲本地數據有個想法。

使用File()構造函數,您只能創建新的文件對象,而不能從本地磁盤讀取文件。

尚不清楚您到底想要實現什么。 您說,input.txt與html和js位於同一目錄中。 因此,它位於服務器上。

如果要從服務器讀取文件,則必須使用ajax請求,該問題已在另一個問題中進行了說明。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM