在 Java 中使用 IE/Chrome HTML 渲染器或使用 JavaScript 存储文件

Using the IE/Chrome HTML-Renderer in Java OR storing files with JavaScript

本文关键字:存储文件 JavaScript Chrome Java IE HTML      更新时间:2023-09-26

我目前正在尝试编写一个小应用程序(不需要互联网访问 - 所以它实际上只是一个本地应用程序),应该保持非常简单。我考虑过简单地使用HTML(+CSS)和一些JavaScript,因为这在很大程度上就足够了,但我还需要访问文件系统才能将我的数据存储在某个文件中,这在javascript中是不可能的(是的,我爬过很多关于JavaScript和文件系统的帖子,但我不喜欢任何解决方案。

所以我想到了另一种方法:有一些很好的库叫做HtmlUnit,它允许我基本上模拟我的JavaScript,同时拥有Java FileAccess。

所以,有两个问题:

  1. 是否可以在某种程度上将 JavaScript 文件声明为"本地",从而获得文件系统权限?

  2. 许多应用程序(游戏等)在内部使用Internet Explorer。是否可以在Java中使用IE(甚至Chrome/Firefoxes/Whatevers)渲染器?我不喜欢我到目前为止找到的任何渲染库 - 或者只是能够将 js+html 代码作为本地应用程序执行?

  3. 我试过了.HTA,我绝对讨厌它们。只是...老。那里什么都不可能。让一个简单的html/js应用程序看起来像在chrome中,但是一个本地应用程序,这将是非常棒的。

问答

  1. 是否可以在某种程度上将 JavaScript 文件声明为"本地",从而获得文件系统权限?

不可以,只能通过ActiveX/插件(例如Java/浏览器插件)来实现。

其他人可能会建议JavaScript具有数据存储或文件系统。但它们不是本地文件系统访问,您无法使用它们读取或写入真实文件。

  1. 许多应用程序(游戏等)在内部使用Internet Explorer。是否可以在Java中使用IE(甚至Chrome/Firefoxes/Whatevers)渲染器?我不喜欢我到目前为止找到的任何渲染库 - 或者只是能够将 js+html 代码作为本地应用程序执行?

JavaFX的WebView使用WebKit作为渲染器。Webkit不是一个完整的浏览器,所以它的功能较少,例如没有localStorage,但你可以用Java代码替换其中的大部分。

SWT浏览器,如另一个答案所述,也可以用作渲染器,但会使您难以打包为单个文件,而且它取决于客户端来安装/更新浏览器。

  1. 我试过了.HTA,我绝对讨厌它们。只是...老。那里什么都不可能。让一个简单的html/js应用程序看起来像在chrome中,但是一个本地应用程序,这将是非常棒的。

可以使用内联代码和数据 uri 将所有资源嵌入到一个 HTML 文件中。这是我的一个项目:[源文件] [单个文件可部署]。

无论如何,大多数浏览器都不允许文件写入,毫无疑问,您已经知道,Chrome 尤其反对文件访问。


建议

根据我的经验,唯一可行的解决方案是:

  1. ActiveX HTML 应用程序
  2. 本机程序,例如Java jar或.Net exe。(或包装为 exe 的罐子)
  3. 成熟的网络应用程序,带有定制的浏览器和量身定制的启动器,例如在USB记忆棒/DVD/安装程序中

我已经完成了所有这些,我个人认为 Jar/Exe 是根据您的要求最平衡的解决方案。

这是可悲的。 如果地铁应用程序像 exe 一样易于部署,我会建议这样做。

是否可以在某种程度上将 JavaScript 文件声明为"本地",从而获得文件系统权限?

Firefox 扩展将具有访问文件系统所需的权限。

是否可以在Java中使用IE(甚至Chrome/Firefoxes/Whatevers)渲染器?

是的,例如使用 SWT 浏览器小部件或 JavaFX WebView

我想知道这对你来说是否足够(使用HTML5存储功能):

function saveFile(localstorage) {
  localstorage.root.getFile("info.txt", {create: true}, function(theFile) {
    theFile.createWriter(function(theContent) {
      var blob = new Blob(["Lorem Ipsum"], {type: "text/plain"});
      theContent.write(blob);
    });
  });
}

浏览器会要求用户提供在本地系统中存储文件的权限。

信用到期的信用