mirror of
https://github.com/BTMuli/TeyvatGuide.git
synced 2025-12-16 09:58:13 +08:00
✨ 完善回调
*增加对于 openApplication 的处理 *支持 screenshot 类型的 share
This commit is contained in:
@@ -255,6 +255,9 @@ class TGClient {
|
|||||||
case "onClickImg":
|
case "onClickImg":
|
||||||
await this.onClickImg(payload);
|
await this.onClickImg(payload);
|
||||||
break;
|
break;
|
||||||
|
case "openApplication":
|
||||||
|
await this.openApplication(payload);
|
||||||
|
break;
|
||||||
case "pushPage":
|
case "pushPage":
|
||||||
await this.pushPage(payload);
|
await this.pushPage(payload);
|
||||||
break;
|
break;
|
||||||
@@ -576,7 +579,7 @@ class TGClient {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* @func share
|
* @func share
|
||||||
* @since Beta v0.3.7
|
* @since Beta v0.3.8
|
||||||
* @desc 分享
|
* @desc 分享
|
||||||
* @param {unknown} payload - 请求参数
|
* @param {unknown} payload - 请求参数
|
||||||
* @param {string} callback - 回调函数名
|
* @param {string} callback - 回调函数名
|
||||||
@@ -592,10 +595,70 @@ class TGClient {
|
|||||||
await this.callback(callback, {});
|
await this.callback(callback, {});
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
if (payload?.type === "screenshot") {
|
||||||
|
const executeJS = `javascript:(async function() {
|
||||||
|
// 查找 id 为 dom2img 的 script
|
||||||
|
var hasDom2img = false;
|
||||||
|
var scripts = document.querySelectorAll('script');
|
||||||
|
for (var i = 0; i < scripts.length; i++) {
|
||||||
|
if (scripts[i].src === 'https://cdn.bootcdn.net/ajax/libs/dom-to-image/2.6.0/dom-to-image.min.js') {
|
||||||
|
hasDom2img = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// 如果没有 dom2img 的 js
|
||||||
|
if (!hasDom2img) {
|
||||||
|
// 添加 dom2img 的 js
|
||||||
|
var script = document.createElement('script');
|
||||||
|
script.src = 'https://cdn.bootcdn.net/ajax/libs/dom-to-image/2.6.0/dom-to-image.min.js';
|
||||||
|
document.body.appendChild(script);
|
||||||
|
// 等待 dom2img 加载完成
|
||||||
|
await new Promise((resolve) => {
|
||||||
|
script.onload = function() {
|
||||||
|
resolve();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
// 用 dom2img 生成图片
|
||||||
|
var shareDom = document.querySelector('.share');
|
||||||
|
var scale = 2;
|
||||||
|
var img = await domtoimage.toPng(shareDom, {
|
||||||
|
width: shareDom.offsetWidth * scale,
|
||||||
|
height: shareDom.offsetHeight * scale,
|
||||||
|
style: {
|
||||||
|
transform: 'scale(' + scale + ')',
|
||||||
|
transformOrigin: 'top left'
|
||||||
|
}
|
||||||
|
});
|
||||||
|
// 转换成 blob
|
||||||
|
var buffer = new Uint8Array(atob(img.split(',')[1]).split('').map(function(item) {
|
||||||
|
return item.charCodeAt(0);
|
||||||
|
}));
|
||||||
|
var _t = window.__TAURI__;
|
||||||
|
var savePath = await _t.path.downloadDir() + Date.now() + '.png';
|
||||||
|
await _t.dialog.save({
|
||||||
|
title: '保存图片',
|
||||||
|
filters: [{ name: '图片', extensions: ['png'] }],
|
||||||
|
defaultPath: savePath,
|
||||||
|
}).then(async function(savePath) {
|
||||||
|
if (savePath) {
|
||||||
|
await _t.fs.writeBinaryFile({
|
||||||
|
contents: buffer,
|
||||||
|
path: savePath,
|
||||||
|
});
|
||||||
|
alert('保存成功');
|
||||||
|
// 处理回调
|
||||||
|
mhyWebBridge('${callback}', {});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
})();`;
|
||||||
|
await invoke("execute_js", { label: "mhy_client", js: executeJS });
|
||||||
|
return;
|
||||||
|
}
|
||||||
// 延时 3s
|
// 延时 3s
|
||||||
setTimeout(async () => {
|
setTimeout(async () => {
|
||||||
await this.callback(callback, {});
|
await this.callback(callback, {});
|
||||||
}, 3000);
|
}, 10000);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -609,6 +672,28 @@ class TGClient {
|
|||||||
console.log(`[eventTrack] ${JSON.stringify(payload)}`);
|
console.log(`[eventTrack] ${JSON.stringify(payload)}`);
|
||||||
await this.loadJSBridge();
|
await this.loadJSBridge();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @func openApplication
|
||||||
|
* @since Beta v0.3.8
|
||||||
|
* @desc 打开应用
|
||||||
|
* @param {unknown} payload - 请求参数
|
||||||
|
* @returns {void} - 无返回值
|
||||||
|
*/
|
||||||
|
async openApplication(payload: unknown): Promise<void> {
|
||||||
|
console.log(`[openApplication] ${JSON.stringify(payload)}`);
|
||||||
|
await appWindow.setFocus();
|
||||||
|
showSnackbar({
|
||||||
|
text: `不支持的操作:OpenApplication(${JSON.stringify(payload)})`,
|
||||||
|
color: "error",
|
||||||
|
});
|
||||||
|
await new Promise<void>((resolve) => {
|
||||||
|
setTimeout(() => {
|
||||||
|
resolve();
|
||||||
|
}, 1500);
|
||||||
|
});
|
||||||
|
await this.window?.setFocus();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const mhyClient = new TGClient();
|
const mhyClient = new TGClient();
|
||||||
|
|||||||
Reference in New Issue
Block a user