🌱 完善客户端,获取 postMessage

This commit is contained in:
BTMuli
2023-10-18 13:21:56 +08:00
parent 4ab679dcea
commit 751372a4ba
7 changed files with 237 additions and 57 deletions

102
src-tauri/Cargo.lock generated
View File

@@ -12,6 +12,9 @@ dependencies = [
"tauri-build",
"tauri-plugin-deep-link",
"tauri-plugin-sql",
"url",
"webview2-com 0.27.0",
"windows 0.51.1",
]
[[package]]
@@ -4010,7 +4013,7 @@ dependencies = [
"unicode-segmentation",
"uuid",
"windows 0.39.0",
"windows-implement",
"windows-implement 0.39.0",
"x11-dl",
]
@@ -4093,7 +4096,7 @@ dependencies = [
"url",
"uuid",
"webkit2gtk",
"webview2-com",
"webview2-com 0.19.1",
"windows 0.39.0",
]
@@ -4203,7 +4206,7 @@ dependencies = [
"thiserror",
"url",
"uuid",
"webview2-com",
"webview2-com 0.19.1",
"windows 0.39.0",
]
@@ -4222,7 +4225,7 @@ dependencies = [
"tauri-utils",
"uuid",
"webkit2gtk",
"webview2-com",
"webview2-com 0.19.1",
"windows 0.39.0",
"wry",
]
@@ -4883,10 +4886,24 @@ version = "0.19.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b4a769c9f1a64a8734bde70caafac2b96cada12cd4aefa49196b3a386b8b4178"
dependencies = [
"webview2-com-macros",
"webview2-com-sys",
"webview2-com-macros 0.6.0",
"webview2-com-sys 0.19.0",
"windows 0.39.0",
"windows-implement",
"windows-implement 0.39.0",
]
[[package]]
name = "webview2-com"
version = "0.27.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cd15556ff1d1d6bc850dbb362762bae86069773dd30177c90d3bfa917080dc73"
dependencies = [
"webview2-com-macros 0.7.0",
"webview2-com-sys 0.27.0",
"windows 0.51.1",
"windows-core",
"windows-implement 0.51.1",
"windows-interface",
]
[[package]]
@@ -4900,6 +4917,17 @@ dependencies = [
"syn 1.0.109",
]
[[package]]
name = "webview2-com-macros"
version = "0.7.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ac1345798ecd8122468840bcdf1b95e5dc6d2206c5e4b0eafa078d061f59c9bc"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.37",
]
[[package]]
name = "webview2-com-sys"
version = "0.19.0"
@@ -4915,6 +4943,17 @@ dependencies = [
"windows-metadata",
]
[[package]]
name = "webview2-com-sys"
version = "0.27.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3775bb005c3170497ec411b36005708b57ad486bfa3d23864c92f5973858ce8d"
dependencies = [
"thiserror",
"windows 0.51.1",
"windows-core",
]
[[package]]
name = "whoami"
version = "1.4.1"
@@ -4971,7 +5010,7 @@ version = "0.39.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f1c4bd0a50ac6020f65184721f758dba47bb9fbc2133df715ec74a237b26794a"
dependencies = [
"windows-implement",
"windows-implement 0.39.0",
"windows_aarch64_msvc 0.39.0",
"windows_i686_gnu 0.39.0",
"windows_i686_msvc 0.39.0",
@@ -4988,6 +5027,18 @@ dependencies = [
"windows-targets 0.48.5",
]
[[package]]
name = "windows"
version = "0.51.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ca229916c5ee38c2f2bc1e9d8f04df975b4bd93f9955dc69fabb5d91270045c9"
dependencies = [
"windows-core",
"windows-implement 0.51.1",
"windows-interface",
"windows-targets 0.48.5",
]
[[package]]
name = "windows-bindgen"
version = "0.39.0"
@@ -4998,6 +5049,15 @@ dependencies = [
"windows-tokens",
]
[[package]]
name = "windows-core"
version = "0.51.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f1f8cf84f35d2db49a46868f947758c7a1138116f7fac3bc844f43ade1292e64"
dependencies = [
"windows-targets 0.48.5",
]
[[package]]
name = "windows-implement"
version = "0.39.0"
@@ -5008,6 +5068,28 @@ dependencies = [
"windows-tokens",
]
[[package]]
name = "windows-implement"
version = "0.51.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fb2b158efec5af20d8846836622f50a87e6556b9153a42772fa047f773c0e555"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.37",
]
[[package]]
name = "windows-interface"
version = "0.51.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0546e63e1ce64c04403d2311fa0e3ab5ae3a367bd524b4a38d8d8d18c70cfa76"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.37",
]
[[package]]
name = "windows-metadata"
version = "0.39.0"
@@ -5289,9 +5371,9 @@ dependencies = [
"url",
"webkit2gtk",
"webkit2gtk-sys",
"webview2-com",
"webview2-com 0.19.1",
"windows 0.39.0",
"windows-implement",
"windows-implement 0.39.0",
]
[[package]]

View File

@@ -16,6 +16,9 @@ tauri-build = { version = "1.4", features = [] }
tauri = { version = "1.4", features = ["api-all"] }
serde = { version = "1.0", features = ["derive"] }
serde_json = "1.0"
webview2-com = "0.27.0"
windows = "0.51.1"
url = "2.4.1"
# sqlite 插件
[dependencies.tauri-plugin-sql]

View File

@@ -2,34 +2,45 @@
//! @desc 客户端模块,负责操作米游社客户端
//! @since Beta v0.3.3
use tauri::{AppHandle, Manager,WindowBuilder};
use tauri::{AppHandle, Manager,WindowBuilder, WindowUrl};
use url::Url;
// 获取米游社客户端入口地址
fn get_mhy_client_url(func: String) -> WindowUrl {
let mut url_res: Url = "https://bbs.mihoyo.com/ys/".parse().unwrap();
if func == "sign_in" {
url_res = "https://webstatic.mihoyo.com/bbs/event/signin-ys/index.html?act_id=e202009291139501".parse().unwrap();
} else if func == "game_record" {
url_res = "https://webstatic.mihoyo.com/app/community-game-records/index.html".parse().unwrap();
}
return WindowUrl::External(url_res);
}
// 操作米游社客户端
#[tauri::command]
pub async fn operate_mhy(handle: AppHandle, arg: String) {
pub async fn create_mhy_client(handle: AppHandle, func: String, arg: String) {
dbg!(&arg);
let has_mhy_client = handle.get_window("mhy_client").is_some();
let mut mhy_client_config = handle.config().tauri.windows.get(1).unwrap().clone();
mhy_client_config.url = get_mhy_client_url(func.clone());
let mhy_client;
if has_mhy_client {
mhy_client = handle.get_window("mhy_client").unwrap();
mhy_client.close().unwrap();
} else {
mhy_client = WindowBuilder::from_config(
&handle,
handle.config().tauri.windows.get(1).unwrap().clone()
)
.build()
.unwrap();
}
if mhy_client.is_visible().unwrap() == false {
&handle,
mhy_client_config,
)
.build()
.unwrap();
mhy_client.show().unwrap();
mhy_client.set_focus().unwrap();
let js_code = r#"
window.MiHoYoJSInterface = {
postMessage: function(arg) { window.__TAURI__.event.emit('post_mhy_client', arg) },
closePage: function() { this.postMessage('{"method":"closePage"}') },
};"#;
mhy_client.eval(&js_code).ok().unwrap();
}
mhy_client.set_focus().unwrap();
let js_code = r#"
window.MiHoYoJSInterface = {
postMessage: function(arg) { chrome.webview.postMessage(arg);console.log(arg) },
closePage: function() { this.postMessage('{"method":"closePage"}') },
};"#;
mhy_client.eval(&js_code).ok().unwrap();
let js_eval = format!("window.MiHoYoJSInterface.postMessage('{}')", arg);
handle.emit_all("post_mhy_client", arg).unwrap();
mhy_client.eval(&js_eval).ok().unwrap();
}

View File

@@ -65,7 +65,7 @@ fn main() {
}
})
.plugin(tauri_plugin_sql::Builder::default().build())
.invoke_handler(tauri::generate_handler![register_deep_link, init_app, client::operate_mhy])
.invoke_handler(tauri::generate_handler![register_deep_link, init_app, client::create_mhy_client])
.setup(|_app| {
let _window = _app.get_window("TeyvatGuide").unwrap();
#[cfg(debug_assertions)] // only include this code on debug builds

View File

@@ -20,25 +20,7 @@
"http": {
"all": true,
"request": true,
"scope": [
"https://act-webstatic.mihoyo.com/*",
"https://api-static.mihoyo.com/*",
"https://api-takumi-record.mihoyo.com/*",
"https://api-takumi.mihoyo.com/*",
"https://api.geetest.com/*",
"https://bbs-api-static.miyoushe.com/*",
"https://bbs-api.mihoyo.com/*",
"https://bbs-api.miyoushe.com/*",
"https://bbs.mihoyo.com/*",
"https://enka-api.hut.ao/*",
"https://hk4e-api.mihoyo.com/*",
"https://hk4e-sdk.mihoyo.com/*",
"https://homa.snapgenshin.com/*",
"https://passport-api-v4.mihoyo.com/*",
"https://passport-api.mihoyo.com/*",
"https://passport-api.miyoushe.com/*",
"https://sdk-webstatic.mihoyo.com/*"
]
"scope": ["https://**"]
},
"shell": {
"all": false,
@@ -73,7 +55,19 @@
}
},
"security": {
"csp": null
"dangerousRemoteDomainIpcAccess": [
{
"domain": "api-static.mihoyo.com",
"windows": ["mhy_client"],
"enableTauriAPI": true
},
{
"domain": "webstatic.mihoyo.com",
"windows": ["mhy_client"],
"enableTauriAPI": true
}
],
"csp": "default-src 'self' *; img-src *; script-src *"
},
"updater": {
"active": false,
@@ -100,7 +94,8 @@
"resizable": false,
"title": "米游社",
"label": "mhy_client",
"url": "https://bbs.mihoyo.com/",
"url": "https://api-static.mihoyo.com/",
"userAgent": "Mozilla/5.0 (Linux; Android 12) Mobile miHoYoBBS/2.60.1",
"visible": false,
"width": 360,
"height": 780,