接入宿主壳原生剪贴板复制路径
H5 复制服务在 native_app 中优先调用 clipboard.writeText 保留浏览器 Clipboard API 与 legacy selection copy 回退路径 补充 HostBridge 剪贴板测试和宿主壳能力文档
This commit is contained in:
@@ -18,6 +18,7 @@ import {
|
||||
requestWechatMiniProgramPhoneLogin,
|
||||
resolveHostRuntime,
|
||||
setHostShareTarget,
|
||||
writeHostClipboardText,
|
||||
} from './hostBridge';
|
||||
import { resetNativeAppHostBridgeForTest } from './nativeAppHostBridge';
|
||||
|
||||
@@ -307,6 +308,9 @@ describe('hostBridge', () => {
|
||||
shell: 'tauri_desktop',
|
||||
platform: 'linux',
|
||||
});
|
||||
await expect(
|
||||
writeHostClipboardText({ text: '作品号 PZ-1' }),
|
||||
).resolves.toBe(true);
|
||||
|
||||
expect(invoke).toHaveBeenCalledWith('host_bridge_request', {
|
||||
request: expect.objectContaining({
|
||||
@@ -328,6 +332,14 @@ describe('hostBridge', () => {
|
||||
},
|
||||
}),
|
||||
});
|
||||
expect(invoke).toHaveBeenCalledWith('host_bridge_request', {
|
||||
request: expect.objectContaining({
|
||||
method: 'clipboard.writeText',
|
||||
payload: {
|
||||
text: '作品号 PZ-1',
|
||||
},
|
||||
}),
|
||||
});
|
||||
});
|
||||
|
||||
test('原生 App 宿主不支持能力时回退到 H5 路径', async () => {
|
||||
@@ -358,6 +370,9 @@ describe('hostBridge', () => {
|
||||
orderId: 'order-1',
|
||||
}),
|
||||
).resolves.toBe(false);
|
||||
await expect(
|
||||
writeHostClipboardText({ text: '作品号 PZ-1' }),
|
||||
).resolves.toBe(false);
|
||||
});
|
||||
|
||||
test('普通浏览器不处理宿主文本导出', async () => {
|
||||
|
||||
@@ -61,6 +61,10 @@ export type HostShareGridRequest = {
|
||||
|
||||
export type HostFileExportTextRequest = FileExportTextPayload;
|
||||
|
||||
export type HostClipboardWriteTextRequest = {
|
||||
text: string;
|
||||
};
|
||||
|
||||
function isUnsupportedHostBridgeError(error: unknown) {
|
||||
return (
|
||||
error instanceof Error &&
|
||||
@@ -449,6 +453,20 @@ export async function getNativeAppHostRuntime() {
|
||||
);
|
||||
}
|
||||
|
||||
export async function writeHostClipboardText({
|
||||
text,
|
||||
}: HostClipboardWriteTextRequest) {
|
||||
if (getHostRuntime().kind !== 'native_app') {
|
||||
return false;
|
||||
}
|
||||
|
||||
try {
|
||||
return await requestNativeHostBoolean('clipboard.writeText', { text });
|
||||
} catch {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
export async function exportHostTextFile(
|
||||
params: HostFileExportTextRequest,
|
||||
) {
|
||||
|
||||
Reference in New Issue
Block a user