接入桌面壳窗口标题同步路径

H5 主站按当前平台阶段同步 document.title

native_app 中通过 app.setTitle 请求 Tauri 窗口标题同步

补充标题同步测试和宿主壳能力文档
This commit is contained in:
2026-06-18 00:07:21 +08:00
parent 78afd81269
commit d64e576e3f
9 changed files with 307 additions and 2 deletions

View File

@@ -18,6 +18,7 @@ import {
requestWechatMiniProgramPayment,
requestWechatMiniProgramPhoneLogin,
resolveHostRuntime,
setHostAppTitle,
setHostShareTarget,
writeHostClipboardText,
} from './hostBridge';
@@ -315,6 +316,9 @@ describe('hostBridge', () => {
await expect(requestHostHapticsImpact({ style: 'medium' })).resolves.toBe(
true,
);
await expect(setHostAppTitle({ title: ' 拼图 - 陶泥儿 ' })).resolves.toBe(
true,
);
expect(invoke).toHaveBeenCalledWith('host_bridge_request', {
request: expect.objectContaining({
@@ -352,6 +356,14 @@ describe('hostBridge', () => {
},
}),
});
expect(invoke).toHaveBeenCalledWith('host_bridge_request', {
request: expect.objectContaining({
method: 'app.setTitle',
payload: {
title: '拼图 - 陶泥儿',
},
}),
});
});
test('原生 App 宿主不支持能力时回退到 H5 路径', async () => {
@@ -388,6 +400,10 @@ describe('hostBridge', () => {
await expect(requestHostHapticsImpact({ style: 'light' })).resolves.toBe(
false,
);
await expect(setHostAppTitle({ title: '拼图 - 陶泥儿' })).resolves.toBe(
false,
);
await expect(setHostAppTitle({ title: ' ' })).resolves.toBe(false);
});
test('普通浏览器不处理宿主文本导出', async () => {

View File

@@ -68,6 +68,10 @@ export type HostClipboardWriteTextRequest = {
export type HostHapticsImpactRequest = HapticsImpactPayload;
export type HostAppTitleRequest = {
title: string;
};
function isUnsupportedHostBridgeError(error: unknown) {
return (
error instanceof Error &&
@@ -504,3 +508,18 @@ export async function requestHostHapticsImpact(
return false;
}
}
export async function setHostAppTitle({ title }: HostAppTitleRequest) {
const normalizedTitle = title.trim();
if (!normalizedTitle || getHostRuntime().kind !== 'native_app') {
return false;
}
try {
return await requestNativeHostBoolean('app.setTitle', {
title: normalizedTitle,
});
} catch {
return false;
}
}