2

有问题的设置:

我有一个在 Windows 机器上运行的独立、离线、信息亭模式的 Chrome 实例。我拥有系统的完全访问权限和任何管理员权限。我可以在设置或取消设置任何标志的情况下启动 Chrome。

任务:

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

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

可能的解决方案:文件 API - 我已经看过这个,但AFAIK如果打开对话框以将数据保存到每个文件,这需要在后台发生。安全性 - 我在其他 SO Questions 中读到,如果减少安全设置,但没有人继续解释哪些设置,这可以实现。是否有一个简单的标志允许它? 如何从谷歌浏览器启用本地文件系统读写访问?- 类似的问题!

理想结果:(类似于 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) 中找到文件的位置并上传从计划任务。完全可行,但这不是一个理想的答案。

4

5 回答 5

5

你可以使用 HTML5 吗?

http://diveintohtml5.info/storage.html

var foo = localStorage.getItem("bar");
// ...
localStorage.setItem("bar", foo);
于 2013-09-11T10:06:58.370 回答
2

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

于 2013-09-11T21:53:42.147 回答
1

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

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

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

于 2013-09-11T10:04:50.900 回答
1

您可能想查看作为 HTML5 规范一部分的本地存储。不过,这仅在现代浏览器中受支持。

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

于 2013-09-11T10:05:04.207 回答
1

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

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

请参阅http://www.html5rocks.com/en/features/storage

于 2013-09-11T10:09:49.430 回答