tauri 真的太难用了,浪费了我整整一天

2024-02-03 01:20:49 +08:00
 drymonfidelia

天天看 V2 有人吹 tarui ,刚好有客户反应我们客户端太大了,于是给公司打包新网站(启动动画播完 location.href 跳转到线上地址,没别的功能)成 exe 的时候想试一下

我们网站检测是否客户端访问是检测请求头的 app-name 字段是否有值(有个中间件,全部请求都检测)

Electron 非常简单,三行代码搞定

 session.defaultSession.webRequest.onBeforeSendHeaders(filter, (details, callback) => {
    details.requestHeaders['app-name'] ='myapp'
    details.requestHeaders['app-ver'] = '1.0-win'
    details.requestHeaders['app-iver'] = '20240202-01M'
    
    callback({ requestHeaders: details.requestHeaders })
  })

tauri 这个问题 Google 能搜到 4 篇讨论贴,实际给出方案的只有这一篇 https://github.com/tauri-apps/tauri/discussions/4912

有人在下面提问说编译不了,快半年了没人回复

我看 Rust 和 tauri 文档折腾了一天还没搞定,放弃了,用 Electron 3 分钟打好包提交 (最后还被领导骂了这么简单一个需求弄了一天是不是又在上班时间打游戏)

附上我改的最后一版,还是不行,有能力的 V 友看看要写多少行才能实现这个简单的功能

fn main() {
    tauri::Builder::default()
        .setup(|app| {
            let main_window = app.get_window("main").unwrap();
            main_window.with_webview(|webview| unsafe {
                let core = webview.controller().CoreWebView2().unwrap();
                let mut token: EventRegistrationToken = EventRegistrationToken::default();
                core.AddWebResourceRequestedFilter("*", COREWEBVIEW2_WEB_RESOURCE_CONTEXT_ALL);
                core.add_WebResourceRequested(
                    CoreWebView2WebResourceRequestedEventHandler::create(Box::new(move |sender, args| {
                        if let Some(args) = args {
                            let request: ICoreWebView2WebResourceRequest = args.Request().unwrap();
                            request
                                .Headers()
                                .unwrap()
                                .SetHeader("app-name", "myapp")
                                .SetHeader("app-ver", "1.0-win")
                                .SetHeader("app-iver", "20240202-01W")
                                .unwrap();
                        }
                        Ok(())
                    })),
                    &mut token,
                );
            });
            Ok(())
        })
        .invoke_handler(tauri::generate_handler![greet])
        .run(tauri::generate_context!())
        .expect("error while running tauri application");
}
14855 次点击
所在节点    程序员
63 条回复
CLMan
2024-02-04 08:23:34 +08:00
@CLMan 需要添加依赖(为了避免兼容性问题,与你使用的 tauri 版本保持一致,可以使用 IDE 的依赖管理功能查看)

[dependencies]
webview2-com = "0.19.1"
windows = "0.39.0"
Eiden
2024-02-04 08:47:09 +08:00
op 是懂提问题的艺术的
guguji5
2024-02-04 10:01:26 +08:00
// 我没记错的话 ..好像几种桌面 gui 都是仅支持各自生态下打包各自的安装包.

@changdy 好像也能打,但是一路报错,不知道是哪里不兼容。给我气坏了
winmagic
2024-02-04 10:35:59 +08:00
img src 访问 http 协议,不支持这个问题有遇到过吗,csp 设置了好像不行
pdxjun
2024-02-04 10:43:02 +08:00
放弃 rust 吧,这是个缝合怪,个人感觉,缝合的还不是很好
NessajCN
2024-02-04 11:22:28 +08:00
对了,今天 tauri 2.0 beta 出来了,你已经可以在前端用现成打包好的 reqwest 了
https://beta.tauri.app/features/http-client/

tauri::Builder::default()
// Initialize the plugin
.plugin(tauri_plugin_http::init())
.run(tauri::generate_context!())
.expect("error while running tauri application");


import { fetch } from '@tauri-apps/plugin-http';

// Send a GET request
const response = await fetch('http://my.api.host/data.json', {
method: 'GET',
});
console.log(response.status); // e.g. 200
console.log(response.statusText); // e.g. "OK"
githmb
2024-02-04 11:35:30 +08:00
总结:不想改前端代码
drymonfidelia
2024-02-04 12:03:45 +08:00
@githmb 前端代码是其它部门写好的 哪有办法说改就改
drymonfidelia
2024-02-04 12:05:52 +08:00
@kkk9 他需要在 webview 里放置同公司其它组的业务页面,很有可能这些页面是服务器渲染的,你替换掉原来的 fetch ,加载页面又不会调用 fetch ,没用
@lisongeee
kkk9
2024-02-04 12:36:50 +08:00
@drymonfidelia #49 所以才需要技术选型。这个问题本身就不是 tauri 和 electron 的问题,是用的人有问题。😂
adoal
2024-02-04 13:01:10 +08:00
tauri
是:用 web 前端技术栈开发本机 UI 的框架;不是:嵌入浏览器访问现成网站。
是:支持多个平台运行的本机 UI 框架;不是:避开不同浏览器行为差异的“跨平台”框架。
CLMan
2024-02-04 16:17:36 +08:00
@drymonfidelia 我前面给出的方案修复了你代码里面的语法错误,你都不看一眼吗?
CLMan
2024-02-04 16:19:49 +08:00
@drymonfidelia 在我本机上实测,可以正确设置 header 。
drymonfidelia
2024-02-04 16:35:57 +08:00
@CLMan 谢谢 今天放假了,在路上没有电脑测试
djkloop
2024-02-04 18:00:10 +08:00
@drymonfidelia #32 细说
wangtian2020
2024-02-05 09:12:11 +08:00
看到 electron 又赢了,我就放心了
secondwtq
2024-02-05 09:35:12 +08:00
算是把 Cunningham's Law 玩儿明白了 ...
wocao666
2024-02-05 09:43:20 +08:00
@drymonfidelia 这么爽??我上班学个习,领导看见了都时不时交代点工作给我干了
iugo
2024-02-05 14:41:50 +08:00
可能需求不一样吧, 我们的 Web 没有做服务端渲染, 所以类似需求的实现方式是前端 JS 检查了一些信息后 API 请求到服务器. 而不是在跳转页面的时候修改请求头.
drymonfidelia
2024-02-05 20:08:25 +08:00
@CLMan #40 的代码可以用,谢谢

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

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

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

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

© 2021 V2EX