最近有很多 App 的奇思妙想,作为前端从业者,拿 JS 开发软件界面简直不要太爽,但是一旦到了发布的时候,问题就来了,用 electron 整个打包吧又太大了,单纯作为网页发布,又少了很多只有客户端才能使用的权限,尤其是很多 Web 应用其实只需要可以绕开跨域请求第三方数据而已,却要为此付出一整个运行时的代价,或者自己花钱搭服务器,真的得不偿失。
拿我最近做的一个 MP3 标签自动识别软件来说吧,其实它的功能很简单,就是识别 mp3 文件,然后请求网易的接口,最后再写入到 mp3 里面,而这样一个小小的需求,其实 JS 很简单就能做到,但就是缺少两个关键功能:1 ,跨域请求第三方接口; 2 ,读写本地文件,而不得不使用 tauri 来完成。而其实方法 2 只需要最新的 Chrome 和 Safari 就可以实现了,只有方法 1 ,是无论如何没办法只通过网页来实现(不使用服务器转发接口的情况下)。
包括 Statckblitz 这样的应用也是如此,就是因为不允许请求跨域,nodejs 环境跑在浏览器上也是诸多不便,不然直接使用 PWA 版本跑 node 服务,那该是多么一件美事啊。
所以我的想法是,如果有这样一个应用,它能够让用户输入的 URL 自动变成 PWA ,同时注入一些 JSBridge ,让网页能够直接调用满血版的 fetch 和文件系统,再加上一些权限限制,这不就成了一个完美的网页容器了吗?而事实上,我用 tuari 开发的几个应用,rust 部分的代码几乎完全相同,因为真的只需要几个关键的权限,就能实现大部分 App 能实现的功能,我现在就能列出几个非常适合这样做的应用: 1 ,Postman 2 ,Statckblitz 3 ,VS Code Online
另外我也想过 Chrome 配合 extension 可以实现这个需求,但是 extension 鱼龙混杂,而且每个 PWA 都需要单独设置,还会影响 Chrome 本身的用户数据,我就是想要一个完全独立的 App ,在里面管理类似的网页和权限。理论上这个应该很容易做到才对。
至于生态,现在已经有很多 electron 和 tuari 应用了,只需要一层 JSBridge 的接口层就能抹平大部分运行容器的差异,而且大部分应用都是开源项目或者独立开发者,做一些小工具场景应该还是会比较有市场的吧
1
wheelg OP 问了 GPT4o 它也很支持,这就让它整个原型出来~
|
2
okakuyang 3 天前
直接让用户使用最新的浏览器就行了
|
![]() |
3
musi 3 天前
> 现在已经有很多 electron 和 tuari 应用,只需要一层 JSBridge 的接口层就能抹平大部分运行容器的差异
不同版本之间的差异你抹不平的 |
![]() |
4
dufu1991 3 天前
目前最好的方案是希望 Chromium 官方能将 Chromium 按模块拆包,现在将一个最简单的应用打包成 Electron ,即使你只是写一下 UI 界面,但是实际你打包进去的包含渲染引擎、V8 引擎、网络堆栈、音视频处理模块、扩展系统、开发者工具、WebRTC 、WebSockets 、WebSockets......其中大多数是我们用不到的,相信按需的话绝大多数应用的体积不会这么大。
|
7
wheelg OP @musi 完全抹平确实有点困难,但是保证基础的 api 表现一致还是可以的,我的想法是不需要完美实现 electron 或者 tauri 的全部功能,只需要一部分(即上面提到的跨域请求,文件系统这样的)即可,让独立开发者只需要专注于 GUI ,哪天乐意了再移植到其他平台也很简单。
|
8
a132811 3 天前
1. chrome 启动时加--disable-web-security 可突破跨域限制:
mac 下可以启动隔离的 chrome: open -na "Google Chrome" --args --disable-web-security --user-data-dir="/tmp/chrome_dev_session" https://stackoverflow.com/questions/3102819/disable-same-origin-policy-in-chrome 2. 禁用 cors 限制的话,会遇到许多问题 - 用户信息有潜在的安全风险 - 网站服务商会受很大的影响:应对来自 c 端的 ai 爬虫就已经很头大了,放开限制的话,随便一个 web 网站都可能主动利用 js 或被注入 xss 对别的网站发起各种分布式攻击(客户端也有这个风险,但是门槛更高一点) 安全、方便、功能、开发体验之间存在许多矛盾的: pwa 相比客户端应用,牺牲了一些功能,得到了安全。 真要给 pwa 搞一个专门的浏览器的话,可能要禁止 cors 带 cookie ,禁止 xss 执行等,完全模仿客户端的行为.... 这可能会影响现有一些网站的执行。 |