需求是编写 dll 能够弹出一个 web 登录页面并且进行回调;
微软有一个 webview2 但是兼容性不好,依赖 edge 。
最好是使用 golang 编写 dll,然后调用 html 页面的实现。
1
lscexpress 2021-09-09 10:15:18 +08:00
关键字,qt,微信或 qq 登录
|
2
tianxia 2021-09-09 10:17:36 +08:00 via Android
aardoid
|
4
JKeita OP @lscexpress 是自己实现的登录,应用调用自己的 web 登录页。
|
6
learnshare 2021-09-09 10:22:06 +08:00 4
流行的方式是打开浏览器,登录完成后通过 URI scheme 跳转回应用
比如 Sourcetree 、VS Code 、Github Desktop |
8
youyouyou0123456 2021-09-09 10:24:50 +08:00
打开浏览器验证就好了。觉得体验不好可以嵌入一个 cef,通过 cef 的回调验证。
|
9
JKeita OP @youyouyou0123456 打开浏览器不行吧,登录后的用户信息数据要回传给应用使用。
|
10
learnshare 2021-09-09 10:34:46 +08:00
@JKeita 浏览器登录一般是返回 token,根据 token 获取其他信息就是了
|
11
nutting 2021-09-09 10:41:44 +08:00
那种能检测到已经登录,我以为是扫描 cookie 了
|
12
xieqiqiang00 2021-09-09 10:49:14 +08:00
自己启动一个服务器,然后用 oauth2.0 那种方法是申请授权就好了
|
13
xieqiqiang00 2021-09-09 10:50:37 +08:00
|
14
ysc3839 2021-09-09 10:51:26 +08:00
WebView2 可以自带依赖文件,最老能兼容 Win7 系统。
还可以用 CEF https://bitbucket.org/chromiumembedded/cef,但是代码复杂很多,无特殊需求的情况下不比 Edge 有优势。 还有一个选择是使用系统内置的 IE 内核,但是就算是 IE 最新版,也有很多特性不支持,更何况用户可能还在用 IE8 等老版本。 |
16
JKeita OP @ysc3839 使用 IE 也不行,win10 都不支持了。我看挺多软件都实现很好不懂怎么搞得,比如 nvidia expression
|
17
JKeita OP @xieqiqiang00 额,现在就是不知怎么编写 dll 调用 web 登录页回调。
|
18
joesonw 2021-09-09 11:17:34 +08:00
本地起服务器监听例如 :9090, 网页登录成功后带着 ticket 回调 localhost:9090
|
21
sutra 2021-09-09 11:26:52 +08:00
是不是用了类似 jsbridge 的东西来实现?
|
22
ysc3839 2021-09-09 11:30:01 +08:00
@JKeita Win10 以及 Win11 都还会支持嵌入式的 IE 控件,不支持的是 IE 的主程序。其他软件八成是带了个 CEF 。
|
23
ysc3839 2021-09-09 11:39:48 +08:00
另外个人也是建议打开系统中的浏览器来登录,这样如果用户已经登录过的话就不需要重新输入密码等等。
以及程序内置的浏览器是有能力窃取用户密码的,我自己是不太信任的。使用系统中的浏览器则没有这个问题,程序最终只能拿到 token 。 |
24
mmdsun 2021-09-09 12:43:03 +08:00 via Android
@JKeita IE 就算不支持微软也不会删除那个调用。win11 也有 IE 的模块。
C#的话可以用 WebBrowser 控件启动浏览器,与客户端完美交互。 [客户端调用网页 js] : webBrowser1.Document.InvokeScript("sayHello",args...); [网页调用客户端方法] : 类上加[ComVisible(true)],客户端函数自动注入到网页的 windows 对象里面。windows.函数名就能调用。 其他语言调用系统 dll 即可,比如( MSHTML.dll ) WebBrowser 控件本质上是 COM 组件。 |
25
j717273419 2021-09-09 12:52:22 +08:00
我能想到 2 个方案,
1,是在 pc 应用中起一个站点,然后在网页中打开.局域网通信. 2,是在 pc 应用注册一个本地的协议,类似你用 thunder://这样能打开迅雷, https://img-blog.csdnimg.cn/20190406095718114.png |
26
j717273419 2021-09-09 13:02:38 +08:00
|
27
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 )。 |
28
xieqiqiang00 2021-09-10 09:34:10 +08:00
@JKeita 怎么打开浏览器你不知道吗...
|