是否可以在没有 HTTP 请求或 <input> 的情况下从 HTML 应用程序目录中检索文本文件?

Is it possible to retrieve text files from HTML app directory without HTTP request or <input>?

我正在开发一个 HTML/javascript 应用程序,旨在 运行 本地化。

处理 img 标签时,可以将 src 属性设置为具有相对路径的文件名,从而可以快速轻松地从应用程序目录加载图像。我想使用类似的方法 应用程序目录 .

检索文本文件

我用过TideSDK,但是不够轻量级。我知道 HTTP 请求,但如果我没记错的话,只有 Firefox 对我使用它进行本地文件访问表示友好(尽管使用 src 访问本地图像似乎不是问题)。我也知道 FileReader 对象;但是,我的界面要求我加载文件 基于文件名 而不是像 <input type="file"> 那样基于文件浏览器选择 ].

有什么方法可以完成这种类型的文件访问,还是我坚持使用上面提到的方法?

浏览器不允许您访问这样的文件,但您可以创建 javascript 文件而不是像这样的文本文件:

text1.js:

document.write('This is the text I want to show in here.');   //this is the content of the javascript file

现在随心所欲地调用它:

<script type="text/javascript" src="text1.js"></script>

浏览器中存在太多安全问题(限制),导致许多本地网络应用程序无法实施,因此我对类似问题的解决方案是从浏览器中移出并进入结合了 Chromium + [=16 的 node-webkit =] + 你的脚本,变成一个完整磁盘的可执行文件 I/O.

http://nwjs.io/

[edit] 对不起,我以为你想用 TideSDK 做这个,如果你想再试一次 TideSDK,我会告诉你我的答案 [/edit]

我不确定这是否是您要查找的内容,但我会尽力解释我的情况。 我有一个允许用户保存他的进度状态的应用程序。为此,我允许他 select 一个文件夹,输入一个文件名并写入此文件。当用户打开应用程序时,他可以打开保存的文件,并取回他的进度。所以我认为这种增强与您正在寻找的类似。

就我而言,我使用本机文件 Select 以允许用户 select 特定保存(我使用的是 CoffeeScript):

Ti.UI.currentWindow.openFileChooserDialog(_fileSelected, {
  title: 'Select a file'
  path: Ti.Filesystem.getDocumentsDirectory().nativePath()
  multiple: false
})

(相关文档http://tidesdk.multipart.net/docs/user-dev/generated/#!/api/Ti.UI.UserWindow-method-openFileChooserDialog

完成此步骤后,我将打开 selected 文件:

if !filePath?
  fileToLoad = Ti.Filesystem.getFile(scope.fileSelected.nativePath())
else
  fileToLoad = Ti.Filesystem.getFile(filePath)
data = Ti.JSON.parse(fileToLoad.read())

(相关文档http://tidesdk.multipart.net/docs/user-dev/generated/#!/api/Ti.Filesystem

请注意,这些片段 copy/paste 来自我的项目,如果没有我的其余代码,它们将无法工作,但我认为这足以向您说明我如何设法打开文件并阅读其内容.

在这种情况下,我使用 Ti.JSON.parse,因为这些文件中只有 javascript 对象,但在您的情况下,您可以直接获取内容。 openFileChooserDialog 不是强制性的,如果您已经知道文件名,或者如果您从其他方式获得它,您可以按照自己的方式使用 Ti.Filesystem。