有没有办法在客户端浏览器中运行的JavaScript中以下列方式访问IO的本地文件?该文件定期附加(每〜25ms)。我们想要读取每一个新行。当附加任何内容时,最好是异步(我们得到某种信号,或回调执行)。这可能吗?如果是这样,怎么样?
我使用Javascript的经验仅限于D3,所以我们将非常感谢有关如何或为何/为何不可行的基本解释。由于安全原因,我完全理解这是不可能的。
编辑:只是为了说清楚,该文件在客户端计算机上。该文件只是一个文本文件。附加到它的进程是客户端计算机上的本机进程。
答案 0 :(得分:2)
答案不是真的,没有。
但有一些解决方法,具体取决于您可以使用的内容(支持的浏览器等)
当您获取本地文件时(我假设您正在使用<input type="file">
而不是部分支持的非标准化方法),您会收到要订阅的"change"
个事件,但该更改反映了所选文件的更改,而不是特定文件内容的更改。
除此之外,如果你有一个继承自Blob
的{{1}}或File
,你基本上会有一个充满数据的缓冲区。
该缓冲区不会根据操作系统中其他地方的更改动态更新自身,也不支持回调选项。
或者,从blob或文件中,您可以选择使用Blob
,它返回引用文件的临时URL,而不是文件的内容。
也就是说,对该文件的任何更改都可能会从后续对该URI的调用中反映出来 这不是我为测试而构建的东西。
没有回调;但是,您可以设置基于时间间隔的心跳,对该URI进行XHR调用,然后将URL.createObjectURL( file )
与之前的.responseText
进行比较。
再一次,没有保证,但是我认为你现在已经接近答案了(虽然仍处于插件/无扩展解决方案的领域),并且可能只需要花一个小时来制作一个原型,还有一些,测试支持(链接是否是实时的,而不是初始表示等)。
.responseText
您现在可以在支持浏览器方面进行更改轮询。