桌面端应用调用 HTML 登录页是怎么实现的。

2021-09-09 10:11:38 +08:00
 JKeita

需求是编写 dll 能够弹出一个 web 登录页面并且进行回调;

微软有一个 webview2 但是兼容性不好,依赖 edge 。

最好是使用 golang 编写 dll,然后调用 html 页面的实现。

2861 次点击
所在节点    问与答
28 条回复
sutra
2021-09-09 11:26:52 +08:00
是不是用了类似 jsbridge 的东西来实现?
ysc3839
2021-09-09 11:30:01 +08:00
@JKeita Win10 以及 Win11 都还会支持嵌入式的 IE 控件,不支持的是 IE 的主程序。其他软件八成是带了个 CEF 。
ysc3839
2021-09-09 11:39:48 +08:00
另外个人也是建议打开系统中的浏览器来登录,这样如果用户已经登录过的话就不需要重新输入密码等等。
以及程序内置的浏览器是有能力窃取用户密码的,我自己是不太信任的。使用系统中的浏览器则没有这个问题,程序最终只能拿到 token 。
mmdsun
2021-09-09 12:43:03 +08:00
@JKeita IE 就算不支持微软也不会删除那个调用。win11 也有 IE 的模块。

C#的话可以用 WebBrowser 控件启动浏览器,与客户端完美交互。
[客户端调用网页 js] :
webBrowser1.Document.InvokeScript("sayHello",args...);
[网页调用客户端方法] :
类上加[ComVisible(true)],客户端函数自动注入到网页的 windows 对象里面。windows.函数名就能调用。

其他语言调用系统 dll 即可,比如( MSHTML.dll ) WebBrowser 控件本质上是 COM 组件。
j717273419
2021-09-09 12:52:22 +08:00
我能想到 2 个方案,
1,是在 pc 应用中起一个站点,然后在网页中打开.局域网通信.
2,是在 pc 应用注册一个本地的协议,类似你用 thunder://这样能打开迅雷,
https://img-blog.csdnimg.cn/20190406095718114.png
j717273419
2021-09-09 13:02:38 +08:00
g00001
2021-09-09 14:53:58 +08:00
WebView2 基于 Edge 但与 Edge 完全分离,支持 WIN7,WIN10,WIN11,WIN11 已经自带 WebView2,Office 也会自动安装 WebView2,目前已经有 2 亿台电脑安装了 WebView2,并且未来大概率会完全普及。

使用 WebView2 的软件会公用一个运行时,由系统维护并且会自动更新内核。且 WebView2 的下载安装速度很快,在国内仍然瞬间就能下载安装好。aardio 里的 WebView2 在调用时就会自动检测,如果没有安装会自动安装 —— 瞬间完成用户体验很好。

WebView2 用来开发桌面软件的优势是与本地语言交互的接口很简洁,比 Electron 笨拙的多进程交互方便太多。用 aardio 实现的一个例子:


如果只是为了做登录窗口,也可以考虑 Sciter JS (支持跨平台) , 可以理解为一个迷你版的 WebView2,而且对桌面开发友好,提供了很多传统网页没有的接口和功能,体积和占用的内存都非常小。Sciter 的前身 HTMLayout,体积更小(只有 2MB ),做出来的界面也非常炫。其实可以用 HTML 写界面的方案很多,aardio 范例里就提供了很多这样的例子:


aardio 还可以在任意能执行 JavaScript 的浏览器里通过 aardio.js 调用 aardio 程序导出的函数(调用标准库 web.rpc.externalServer )。
xieqiqiang00
2021-09-10 09:34:10 +08:00
@JKeita 怎么打开浏览器你不知道吗...

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

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

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

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

© 2021 V2EX