仅使用JavaScript将数据保存到本地文件

时间:2013-09-11 09:58:01

标签: javascript google-chrome

有问题的设置:

我独自站立,离线,在Windows计算机上运行Chrome的kiosk模式实例。我可以完全访问系统和任何管理员权限。我可以在设置或取消设置任何标志的情况下启动Chrome。

任务:

我被要求创建一个日志文件,用于跟踪我正在编码的离线应用中的用户活动。这是一种简单的分析形式,它将每个事件附加到用逗号分隔的文件末尾。然后,该文件将通过计划任务每​​天发送一次到服务器。 (这都不是我的想法,所以请不要拖累我)

排除了: 任何服务器端代码 - 我已经游说过Node,PHP等,但因为这将分发给许多不同的安装,所以我们不能保证会安装它。 Flash / ActiveX / Java - 理想情况下要避免这种情况(即使这些将默认安装)

可能的解决方案: 文件API - 我已经看了这个,但 AFAIK 如果打开对话框将数据保存到每个文件,这需要在后台进行。 安全性 - 我已经在其他SO问题中读到,如果安全设置减少但是没有人继续解释哪些安全设置可以实现这一点。有一个简单的旗帜允许吗? How to enable local file system read write access from Google chrome? - 类似的问题!

理想的结果:(类似于PHP)

$file = 'log.txt';
$current = file_get_contents($file);
$current .= ",clicked:link";
file_put_contents($file, $current);

可能的理想副作用:证明这是不可能的并且强制使用PHP / Node / Java;)

回复建议本地存储的人:我没有存储唯一的键/值对,这非常像设置cookie。类似地,存在文件大小限制。 对那些建议使用Web SQL(如chrome中的SQLite)的人来说,如果它不是chrome扩展名,则会有文件大小限制。我看到工作的唯一方法是,如果我要在Windows目录中找到该文件的位置(C:\ Users \%USERNAME%\ AppData \ Local \ Google \ Chrome \ User Data \ Default \ databases)并上传该文件来自日程安排任务。完全可行,但这不是一个理想的答案。

5 个答案:

答案 0 :(得分:5)

您可以使用HTML5吗?

http://diveintohtml5.info/storage.html

var foo = localStorage.getItem("bar");
// ...
localStorage.setItem("bar", foo);

答案 1 :(得分:1)

您可以使用 localStorage 来保存离线数据。使用Javascript访问其他文件是不可能的,因为它违反了沙箱。

来自http://en.wikipedia.org/wiki/JavaScript#Security

  

JavaScript和DOM为恶意作者提供了通过Web在客户端计算机上运行脚本的潜力。浏览器作者使用两个限制包含此风险。首先,脚本在沙箱中运行,在沙箱中,脚本只能执行与Web相关的操作,而不是创建文件等通用编程任务。

答案 2 :(得分:1)

您可能需要查看属于HTML5规范的Local Storage。 这只会在现代浏览器中得到支持。

如果您需要使用较旧的浏览器,那么仍然可以实现您使用dojox.storage后的目标

答案 3 :(得分:1)

使用 Web存储 Web SQL 数据库等HTML5功能来存储日志。

每当需要从客户端存储中读取日志并将其发送回服务器&删除客户端存储。

参考http://www.html5rocks.com/en/features/storage

答案 4 :(得分:1)

您可以使用Chrome Apps File API,您需要通过用户操作授予对该文件的访问权限一次,但之后您可以使用restoreEntry

再次访问该文件