大家了解 为什么 PWA 还有 web assembly 之类的技术,为什么不开放文件和网络权限吗?

2019-10-25 12:12:20 +08:00
 maomaomao001

PWA 真的是好东西啊,可以离线运行, 感觉明明可以给他文件,网络(可跨域不限制的)权限 (或者至少让用户选择给不给这些权限)的话,感觉会非常强大啊, 再放开 https 的限制 (比如像 chrome 插件那样可以打包本地安装使用), 完全可以当 native app 的用的呀。 比如各种小工具

还有 web assembly 也是,性能那么强大了, 结果还是没有办法 操作文件 和 发起跨域网络请求的能力,这个么多性能用来干嘛

4980 次点击
所在节点    问与答
59 条回复
maomaomao001
2019-10-25 17:18:42 +08:00
@momocraft 可是现在 wasm 的 net 再强大也会被浏览器挡住请求 🐶
maomaomao001
2019-10-25 17:20:41 +08:00
@DOLLOR 对的,想要的就是一个类似这一类的文件操作方案,赶紧实践好成为标准就好了
whileFalse
2019-10-25 17:24:52 +08:00
@maomaomao001

“Node.js 能访问文件系统,浏览器 js 不行”你能接受;“c++桌面编程能访问文件系统,web assembly 不行”很难理解?
PWA 的核心就是个类库,纯 js 裸写也能写出来。
whileFalse
2019-10-25 17:25:20 +08:00
修正,PWA 是个应用设计思路
maomaomao001
2019-10-25 17:30:08 +08:00
Node.js 能访问文件系统,浏览器 js 不行”你能接受

不不,我现在不能接受了,以前能接受,但是现在 js 也比较强大了,而却更是出现了 webassembly 这种高性能方案,



我还是觉得用沙箱(模拟)环境之类的允许他们操作文件和网络比较好,或者至少让用户选择让不让应用这么操作,


对了,类似的是,你用浏览器打开地图网站, 这个时候浏览器就会提示要不要给这个网站提供位置信息啊,
我说的就是类似这样的功能,为什么不能给用户呢,我自己写的工具 app 我还不知道它会不会偷我的隐私吗?
maomaomao001
2019-10-25 17:30:38 +08:00
为什么不能给用户呢->为什么不能把选择权给用户呢?
yyfearth
2019-10-25 17:30:42 +08:00
@maomaomao001 首先 PWA,web assembly 以及 文件和网络权限 其实没有什么关联
不同的技术和 API 罢了

PWA 就是可以离线运行和安装的网页版小程序 目的是用户体验看起来像本地程序 同时又不需要应用商店来分发
Web Assembly 是除了 JS 以外一个全新的基于二进制的运行时 一方面运行效率高 同时可以把各种现有的程序直接移植到 Web 平台 又可以支持任何可以编译到 WASM 的语言
文件和网络权限或者 API 这个是浏览器提供的功能罢了
这几个其实没什么相互的联系
至于 WebApp 的开放生态 也就 Google 有兴趣 其他厂商巴不得让所有 App 都建在自己的封闭围墙里面(其实就算是开放的 Web 其实也可以算是 Google 的围墙)每个厂商都有自己的如意算盘 要想让系统或者各大浏览器统一来支持是很困难的事情

“为什么缺迟迟不开放网络能力和文件能力”
之所以不给 WebApp 文件和网络权限 是因为安全问题 就算你可以加上权限管理和沙盒 但是总有办法绕过的
你没办法给一个随便可以打开运行的网页随便访问文件系统 以及随便链接其他网络 这样黑客得笑死
本地 App 还好控制一点 可以用签名来做一些保护 另外现在还到搞封闭花园和沙盒什么的

“微软他们为什么不考虑这么搞”
你说的小工具一个 html 就可以了 其实微软早在 IE5/Win98 的时代就有了
就是 HTA 可以用 html/css 写 UI 用 js+vba 访问几乎所有本地系统 API 文件读写访问网络什么都可以
结果并没有什么正经的软件在用 倒是各路病毒木马用的很欢

“谷歌为什么不考虑这么搞”
Google 一直在尝试做安全又实用的文件系统和文件访问 API 给浏览器
最早有 FileReader API 现在也可以用
同时还有 FileSystem API 沙盒的文件系统 但是被标准否决了 同时也很难用 局限性太大
最近又出了了新的 Native File System API 我觉得这个应该就是你想要的吧
但是要推成标准 让 Firefox 和 Safari 支持可就难了
最近 Firefox 疯狂注重安全和隐私 自然不想要这种高风险的 API 而 Safari 东家 Apple 希望 App 强大 并不希望 WebApp 可以强大到取代 Apps

“感觉现在开发跨平台桌面应用太费劲了”
对于跨平台的 UI 你想要保证兼容性问题 你就得自带浏览器引擎 否则就算是相同的浏览器或者相同 web 核心 不同版本也可以弄的你够呛 所以 Electron 这种虽然好几百 MB 但还算不错的选择 只不过应该还可以通过组件化来优化一下体积 不用的功能应该可以丢掉(貌似可以精简到 80-100MB 左右)
如果非常在乎体积 兼容性要求低一些 其实各大系统都有系统自带 web 核心来用 做出来的 app 都可以非常的小 效果也还过得去
tyrealgray
2019-10-25 17:36:37 +08:00
PWA 现在最适合的业务是那些阅读信息类,比如 twitter,新闻网站,视频网站很适合直接搞成 pwa。
其他应用想直接用 pwa 做可能都不适合,浏览器之间区别太大了。
sujin190
2019-10-25 17:41:21 +08:00
@maomaomao001 #35 但是这明显是个不合理需求,web 从设计之初想的就是无本地依赖话,大量文件的存储应该有网络来完成,本地保存大量文件本身就不符合 web 随处可用的思想,也正基于此,我们打开访问网页才很随意很方便,不用担心有任何网页会在你设备上大量保存文件,也不用担心你无意中在某个不安全设备访问网页后保留你私人数据造成不安全因素,要求使用这个管理设备依赖这是不符合 web 设计思想的,也是极其不合理的

从未来看,个人设备会变的越来越多,管理设备依赖将会变的越发困难,所以设备无关的 web 才是更好的,数据保存应该全部有网络来完成,集中管理集中授权
maomaomao001
2019-10-25 17:43:36 +08:00
@yyfearth 感谢你的回复

针对这一点: App 还好控制一点
为什么 App 会好管理,这个没太明白 ,
web 上是做不到类似 native app 式的管理吗?

其实我现在想要的,似乎是可以理解为:
我想要一个新的安装包格式 (假设是 .chromeApp 吧)

开发流程
1.正常像前端 web app 那样开发
2.完成后,发布方式又两种

1.是正常部署到 web server
2.把 html js css 打包后形成 xxApp.chromeApp 文件 (也许仅仅是 zip 压缩文件呢) (这个正式我很想要的一点)


也就是未来存在 xxApp.chromeApp 格式的应用程序包,无论是 Android 还是 ios,更别说是 windows 和 mac 了,
只要是个浏览器就能安装使用,这得多好呀
yyfearth
2019-10-25 17:58:03 +08:00
@maomaomao001 Chrome App 不是已经有了吗 虽然没有移动端支持 但是桌面系统都支持了啊
也可以访问本地文件 可以授权访问任何网址
即有应用商店 也可以手动载入自己写的

主要问题还是安全性
发布的 app 经过审查 加上签名校验 安全性还可以有点保障

否则就算你给用户来选择 不是所有用户都知道这些

更重要的是要防止被黑客利用 通过复杂的手段钻漏洞 彻底攻破系统的安全性
ClarkAbe
2019-10-25 18:51:40 +08:00
@maomaomao001 #16 跨域 post.....碰不到服务器貌似没什么好的办法.....
runze
2019-10-25 19:16:16 +08:00
楼主可能想要 https://deskgap.com/
runze
2019-10-25 19:23:07 +08:00
https://github.com/electron/electron/issues/673

早在 2014 年就有人想要解决每个 electron 应用都需要自带一份 runtime 的问题,但至今都没有结果。
Phariel
2019-10-25 19:32:01 +08:00
你要这么讲 ActiveX DLL COM 表示不服 当年在 WINDOWS 环境下如日中天 怎么现在都不普遍使用了?
usam
2019-10-26 07:57:56 +08:00
只写 web 的程序员才有这种想法吧
maomaomao001
2019-10-26 09:24:53 +08:00
@usam 有可能吧,之前写过一点 Andriod,感觉,除了视频播放器之类的应用,和股票类需要实时性很高的应用之外,很多大部分 app 完全没有必要做成 native 呀
a132811
2022-08-06 21:18:33 +08:00
@maomaomao001 挖个坟,chrome pwa 已经开放了文件系统、摄像等主要 API 了。参考:
1. https://fugu-tracker.web.app/#shipped
2. https://whatpwacando.today/

文件系统需要用户授权访问指定的目录。

现在的授权机制已经在安全、易用性、开发效率之间做到很好的平衡了。

Proj fugu 有人提过 fetch without CORS ,但是我是不希望取消跨域 CORS 的,这对网站的数据保护绝对不是好事。

CORS 是各网站本身的要求,如果能轻松绕过 CORS ,随便不小心点一个钓鱼网站就能偷偷爬数据,PWA 应该会受各大网站所反对、更别提国内的审查备案了。

本来 Android App 滥用文件权限,就已经受够了。


想绕过 CORS ,必须要付出点成本:参考 Proj Fugu 提的 feature https://bugs.chromium.org/p/chromium/issues/detail?id=962321
1. 自己部署 cors.your.com 或者使用别人的 cors 代理
2. 或者利用 cors chrome 扩展,扩展这个东西谷歌还是会审查一下的
3. 或者让用户下载一个 app 专门,不干别的事,就提供 CORS 代理,证书什么的让用户自签名(反正是用户自己授权安装的,风险自担)
a132811
2022-08-06 21:23:41 +08:00
@a132811 主要缺点是国内不能使用 google 的 Web Notifications

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/612877

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX