【问题标题】:Is it possible to write a local web application that does not need a server?是否可以编写不需要服务器的本地 Web 应用程序?
【发布时间】:2023-08-19 02:13:01
【问题描述】:

我想创建一个本地应用程序,它具有基于浏览器的 UI,而不是基于 MFC / Qt / 等的独立 GUI。如果我不想在本地机器上运行网络服务器,我该如何实现我的应用程序的动态部分?浏览器能否指向机器上的本地脚本、可执行文件或库?我可以直接使用本地数据库吗>这种方法有什么陷阱?

【问题讨论】:

  • 您做出这个决定的过程是什么?
  • HTTP + CSS 非常适合制作动态且可移植的 GUI。但是服务器是本地 Web 应用程序的不便之处,可能意味着安装需要提升等。这就是为什么 - 如果可能的话要避免使用服务器。
  • @paperjam:安装服务器并不需要 root 权限。在端口 80 上运行需要它,但您可以在其他端口上运行您的服务器。我们这样做是为了实现我们的网络应用程序的桌面版本。基本上是在随机端口上运行的最小 perl 服务器(我们的应用程序在 perl 中)和连接到服务器的自定义 webkit 可执行文件。我们选择 webkit 来构建我们的自定义浏览器,因为它支持三大技术:Windows、Mac 和 Linux。
  • @slebetman:到此为止,您还不如放弃服务器并将自定义 URL 方案/协议集成到您的 Webkit 或 Chromium 浏览器中。或者只是在 http 请求离开浏览器之前拦截它们。然后可以将服务器链接到浏览器可执行文件。这是我目前正在考虑的路线。
  • @paperjam:对我来说,我已经用 perl 编写了应用程序,因此服务器路由最有意义。即使没有,我也很犹豫用 C/C++ 编写 Web 处理代码,所以我们仍然必须弄清楚如何在 Webkit 和脚本引擎之间进行 IPC。 TCP/IP 恰好是最可靠的跨平台通信方式。由于我们使用 TCP/IP 还不如使用 HTTP ;-)

标签: web-applications local


【解决方案1】:

是的,但有局限性。主要限制是您不能执行任何 CGI 操作,因为浏览器将打开并显示您的脚本源代码,而不是执行它们。这有几个含义:

  1. 您无法连接到数据库。这使得存储状态和用户数据等常见事情变得困难。
  2. 您不能设置内容类型。这意味着您不能做任何花哨的 XML 工作,例如提供 SVG 文件或在 XMLHttpRequest 中使用 XML。
  3. 您无法生成动态图像(使用 ImageMagick 或 GD)。尽管使用 HTML5,您可以使用画布来做到这一点。
  4. 您无法读取或写入文件系统。这再次限制了您保存数据的能力。但它可以通过正确的用户权限来完成(更多内容见下文)。

但有一些解决方法。 HTML5 允许您将数据存储在本地存储中,但显然这不适用于旧版浏览器。您可以将数据存储在 cookie 中,但有大小限制。最后,您实际上可以保存到文件。您必须指示您的用户修改他们的浏览器首选项以允许您的脚本执行此操作,但可以这样做。这方面的一个例子是TiddlyWiki。它是一个包含在单个 HTML 文件中的独立个人 wiki。每次您保存新内容时,页面都会修改并自行保存。您可能想看看他们是如何从中获得灵感的。

【讨论】:

    【解决方案2】:

    我相信在这种情况下,您在脚本方面的唯一选择是 Javascript。 (或 Java Applets 或 Flash,但我认为你不想要那个)

    我建议看看 QT 的嵌入式 webkit。您可以使用它在简单的 QT 应用程序中嵌入浏览器并将其用于您的大部分 UI,然后您就可以在后端使用 C++/QT。 QT 能够将 C++ 代码直接链接到 Javascript。

    请参阅QWebFrame class,尤其是addToJavaScriptWindowObject 方法和Qt WebKit Bridge

    【讨论】:

      【解决方案3】:

      如果你想要纯 HTML 路由 HTML5 会让你在浏览器中创建本地数据库;拥有足够的 javascript 编码经验,您可以在其中编写一个完整的站点,以 JS 呈现所有内容,而不是加载 HTML 文件。加载一个文件并使用 javascript 引擎呈现之后的所有内容。

      如果它是一个有意义的应用程序,你可以这样写而不发疯,向你致敬。

      如果您在 Windows 上,您可以作弊并使用 Active x/vbscript - 但如果您这样做,为什么不编写一个 click once .net 应用程序。如果没有一些 Web 服务器应用程序组件,浏览器将无法与传统的数据库引擎对话。

      【讨论】:

        最近更新 更多