使用浏览器作为桌面 UI

2023-11-21

如何使用浏览器作为桌面应用程序的 UI?到目前为止我想出的方法是......

  1. 使用所有 HTML/Javascript。问题:无法访问文件系统或其他任何内容。
  2. 在使用应用程序时运行本地网络服务器。问题:用户完成后如何杀死它?我的用户的技术水平不足以使用 Ctrl+C。
  3. 在常规 GUI 中嵌入浏览器组件。问题:嵌入式浏览器组件充其量也往往会出现故障。对 Javascript/CSS 的支持永远不如真正的浏览器。
  4. ...?

理想的解决方案适用于任何技术。我知道有一些选择,例如编写 Firefox 扩展,但我希望在后端技术和浏览器独立性方面拥有完全的自由。


请注意,如果您选择运行本地网络服务器,则会带来安全风险。

在同一台计算机上运行的任何了解您的应用程序的网页都可以使用 Javascript 向您的服务器发送请求,并且您没有简单可靠的方法来了解请求的来源。 (不要相信referer header)

使用类似方法的 Google 桌面存在多个实际漏洞,允许任何网页读取磁盘上的任何文件。

有几种方法可以防止这种情况发生;我建议要求每个请求都有一个每台机器随机生成的身份验证密钥(并在某个时候过期),您可以将其放入实际页面的源中。 XHR 保护将阻止恶意网站读取身份验证密钥,从而使其无能为力。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用浏览器作为桌面 UI 的相关文章

随机推荐

  • 如何将字节切片 (&[u8]) 的缓冲区转换为整数?

    我正在从文件中读取原始数据 我想将其转换为整数 fn main let buf u8 0 0 0 1 let num slice to i8 buf println 1 num pub fn slice to i8 buf u8 gt i3
  • 覆盖删除运算符

    我想在我的班级中覆盖删除运算符 这就是我正在尝试做的事情 但没有成功 class Complex void operator new size t s void operator delete void ptr void Complex o
  • 为什么 JSON 字符串中 double 会转换为 int

    我刚刚编码将一个双值数组放入JsonObject 但是 当我打印它时 我所有的 double 值都会转换为 int 值 有人可以帮助我了解背后发生的事情吗 请让我知道放入原始数组的最佳方法JsonObject public class Js
  • 嵌套列表的 LINQ to Entities 投影

    假设这些物体 class MyClass int ID get set string Name get set List
  • 查询 MongoDB 以获得有序的不同值

    我正在使用 Morphia Java 驱动程序来查询包含以下形式集合的 MongoDB MyCollection TypeA TypeB 我想检索 TypeB 的所有不同值 我使用以下代码执行此操作 DBCollection myCol g
  • ASP.Net MVC 中的实时视频聊天 + 录制解决方案 [关闭]

    Closed 这个问题不符合堆栈溢出指南 目前不接受答案 我想在 ASP NET MVC 中开发一个应用程序 这是详细的场景 应用程序应提供 实时 视频聊天的设施 不应该有任何延迟 可接受的延迟低于 4 秒 但由于这是一次面试 超过 4 秒
  • 适用于 Android 的 Visual Studio 模拟器 - 模拟设备运行需要内部虚拟网络交换机

    Problem 我想用适用于 Android 的 Visual Studio 模拟器但每当我尝试启动它时 它都会失败 日志的最后部分是 27 9 2015 11 10 38 Informational Session Started 27
  • 使用 jQuery 获取多个文件选择的所有值[重复]

    这个问题在这里已经有答案了 可能的重复 使用 javascript 从多文件上传控件中检索文件名 收到
  • 为什么 execve() 的第一个参数必须是可执行文件的路径

    我了解 execve 和系列要求其参数数组的第一个参数与其第一个参数也指向的可执行文件相同 也就是说 在此 execve prog args env args 0 通常与 prog 相同 但我似乎无法找到有关原因的信息 我也理解可执行文件
  • 动态图标 PWA 清单

    我正在使用 angular5 制作一个白色标签 PWA 我想知道是否可以根据 URL 中的信息动态更改清单文件中的 png 图标 我想要为每个独特的组织使用不同的图标 like www mywebsite com organization1
  • 基础的定义必须先于派生合约的定义

    我有两个不同的文件 即 Project1 sol 和 Project2 sol Project2 sol 就像 import Project1 sol contract Project2 address newProject1Address
  • 使用 ggplot 绘制大量时间序列。是否可以加快速度?

    我正在处理数千个气象时间序列数据 可以从此处下载示例数据 https dl dropboxusercontent com s bxioonfzqa4np6y timeSeries txt 在我的 Linux Mint PC 64 位 8GB
  • 使用dispatch_async加速搜索?

    我正在尝试加快我的应用程序搜索速度 当有大量数据时它会出现滞后 所以我正在尝试拆分搜索谓词 on UI通过使用dispatch async not dispatch sync如果我使用它 没有什么不同 问题是当我使用dispatch asy
  • 重新连接后 Chrome net::ERR_HTTP2_PROTOCOL_ERROR 200

    我正在将节点服务器与处理服务器发送事件流的 Express 应用程序一起使用 这是通过启用了 http2 的 NginX 进行代理的 SSE 事件通过 React 应用程序中的 EventSource 来使用 我每 10 秒发送一条心跳消息
  • 记录类型的前向声明

    有没有像标题那样的东西 我正在尝试在转换过程中执行此操作API 结构 并遇到了一些我以前没有遇到过的事情 PFNReaderTranslatedDispatch function var msg TMsg BOOL stdcall PFNR
  • Google 应用引擎实体组

    据我从应用程序引擎教程中了解到 实体组仅出于事务目的而存在 仅在事务需要时才使用实体组 来自教程 位于同一实体组中的定义是具有相同的根 那么 具有超过 1 个层次结构级别有什么用呢 也就是说 为什么我要用 A gt B gt C A是根 B
  • 检查数组中的所有布尔值是否都为 true?

    假设我有这个布尔数组 bool something 4 false false false false 现在 有没有简单的方法可以检查该数组中的所有值是否同时为真 假 而不是这样做 if something 0 false somethin
  • 我必须删除它吗? [Qt]

    在下面的示例中 我是否必须从堆中删除对象 如果是 怎么办 include
  • 我如何准备要发布的 Jetpack compose 应用程序,@Preview 可组合项怎么样?

    我的 Jetpack compose 应用程序的源代码加载了 Preview 可组合项 我通过从源代码中删除所有这些 Preview 可组合项来准备发布我的应用程序 就像我们所做的那样 例如 使用日志方法 有什么办法可以自动化这个删除过程吗
  • 使用浏览器作为桌面 UI

    如何使用浏览器作为桌面应用程序的 UI 到目前为止我想出的方法是 使用所有 HTML Javascript 问题 无法访问文件系统或其他任何内容 在使用应用程序时运行本地网络服务器 问题 用户完成后如何杀死它 我的用户的技术水平不足以使用