【问题标题】:Python desktop software with web interface带有网络界面的 Python 桌面软件
【发布时间】:2013-02-14 01:48:33
【问题描述】:

我正在构建带有 Python 后端和 Web 界面的桌面软件。目前,我必须启动后端,然后在浏览器中打开界面。如果我不小心刷新了页面 - 那么一切都会清除!我想做的是启动应用程序并出现一个全屏浏览器窗口(使用 Chrome)——这应该不难。我有两个问题:

  1. 可以禁用刷新吗?
  2. 是否可以在关闭 Web UI 时挂钩关闭我的程序?

更新

我正在寻找的更像是这样的:geckofx。一种在桌面应用程序中嵌入 Chrome 网页的方法。除了我使用的是 Python 而不是 C#

【问题讨论】:

  • 您真的要打开 Chrome 而不是用户的默认网络浏览器吗?
  • @abarnert:这个软件将只用于我们的机构,所以是的,我们愿意限制浏览器以确保它更一致地工作

标签: python html google-chrome


【解决方案1】:

您的第一个问题是disable f5 and browser refresh using javascript

对于您的第二个问题,这取决于您正在构建什么样的应用程序,但通常答案是否定的。

如果您可以依靠 JS 来捕捉关闭,例如,在关闭之前向服务发送“退出”消息,那很容易。但是,在很多情况下这不起作用,因为客户无法赶上收盘价。

另一方面,如果您可以依赖客户端和服务之间的持续连接(例如,使用 WebSocket),您可以在连接断开时退出。但通常情况下,你不能。

最后,如果你正在为一个平台编写一些东西,你也许可以使用操作系统级别的信息来处理 JS 不能处理的情况。 (例如,在 OS X 上,您可以将侦听器附加到默认的 NSDistributedNotificationCenter 并在 Chrome 退出时收到通知。)但通常,您不能依赖它,即使可以,它可能仍然 不能覆盖 100% 的情况。

因此,您需要使用每个“真实”网络应用程序用于管理会话的相同技巧。例如,客户端可以每5分钟发送一次keepalive,如果5分钟内没有收到任何请求,服务器可以退出。 (你仍然可以有一个明确的“退出”命令,只是不能总是依赖它。)如果你想了解更多关于如何做到这一点的信息,可能有 300 个关于它的问题。

【讨论】:

    【解决方案2】:

    您可以只嵌入 Webkit,而不是嵌入 Chrome(我不知道在 Windows 上,但在 Mac 和 Linux 上很容易)。
    应用程序逻辑接缝在服务器端,浏览器仅用作界面。如果是这样的话,你可以把“onbeforeunload”放在body标签里,然后调用一个js函数向服务器发送ajax请求就死掉了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-07-29
      • 1970-01-01
      • 2013-12-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-15
      相关资源
      最近更新 更多