收口H5桥接载荷边界

让H5 HostBridge facade 复用共享MIME清单

增加原生壳门禁拦截H5本地复制MIME边界

补充共享决策记录中的载荷边界约定
This commit is contained in:
2026-06-19 13:19:12 +08:00
parent 3439250419
commit 8aaa5e93e2
3 changed files with 60 additions and 28 deletions
+10 -28
View File
@@ -13,13 +13,9 @@ import type {
FileImportImageResult,
FileImportTextResult,
HapticsImpactPayload,
HostBridgeAudioMimeType,
HostBridgeCapability,
HostBridgeDocumentMimeType,
HostBridgeImageMimeType,
HostBridgeMethod,
HostBridgeRuntimeResult,
HostBridgeTextMimeType,
LocalNotificationPayload,
NavigationCanGoBackEventPayload,
NetworkStatusResult,
@@ -29,9 +25,12 @@ import type {
ShareOpenPayload,
} from '../../../packages/shared/src/contracts/hostBridge';
import {
HOST_BRIDGE_AUDIO_MIME_TYPES,
HOST_BRIDGE_DOCUMENT_MIME_TYPES,
HOST_BRIDGE_IMAGE_MIME_TYPES,
HOST_BRIDGE_NATIVE_APP_QUERY,
HOST_BRIDGE_RUNTIME_CONTEXT_QUERY_KEY,
HOST_BRIDGE_TEXT_MIME_TYPES,
HOST_BRIDGE_WECHAT_MINI_PROGRAM_SOURCE_QUERY,
isHostBridgeCapability,
normalizeHostBridgeBadgeCount,
@@ -835,11 +834,7 @@ export async function exportHostAudioFile(
}
}
const HOST_BRIDGE_IMAGE_MIME_TYPES = new Set<HostBridgeImageMimeType>([
'image/png',
'image/jpeg',
'image/webp',
]);
const HOST_BRIDGE_IMAGE_MIME_TYPE_SET = new Set(HOST_BRIDGE_IMAGE_MIME_TYPES);
function normalizeHostImageImportResult(
payload: FileImportImageResult | null | undefined,
@@ -850,7 +845,7 @@ function normalizeHostImageImportResult(
payload.action !== 'selected' &&
payload.action !== 'dropped' &&
payload.action !== 'captured' ||
!HOST_BRIDGE_IMAGE_MIME_TYPES.has(payload.mimeType) ||
!HOST_BRIDGE_IMAGE_MIME_TYPE_SET.has(payload.mimeType) ||
typeof payload.fileName !== 'string' ||
!payload.fileName.trim() ||
typeof payload.base64Data !== 'string' ||
@@ -950,15 +945,8 @@ export async function scanHostQrCode() {
}
}
const HOST_BRIDGE_TEXT_MIME_TYPES = new Set<HostBridgeTextMimeType>([
'text/plain',
'text/markdown',
'text/csv',
'application/json',
]);
const HOST_BRIDGE_DOCUMENT_MIME_TYPE_SET = new Set<HostBridgeDocumentMimeType>(
HOST_BRIDGE_DOCUMENT_MIME_TYPES,
);
const HOST_BRIDGE_TEXT_MIME_TYPE_SET = new Set(HOST_BRIDGE_TEXT_MIME_TYPES);
const HOST_BRIDGE_DOCUMENT_MIME_TYPE_SET = new Set(HOST_BRIDGE_DOCUMENT_MIME_TYPES);
function normalizeHostTextImportResult(
payload: FileImportTextResult | null | undefined,
@@ -967,7 +955,7 @@ function normalizeHostTextImportResult(
!payload ||
typeof payload !== 'object' ||
payload.action !== 'selected' ||
!HOST_BRIDGE_TEXT_MIME_TYPES.has(payload.mimeType) ||
!HOST_BRIDGE_TEXT_MIME_TYPE_SET.has(payload.mimeType) ||
typeof payload.fileName !== 'string' ||
!payload.fileName.trim() ||
typeof payload.content !== 'string' ||
@@ -1057,13 +1045,7 @@ export async function importHostDocumentFile() {
}
}
const HOST_BRIDGE_AUDIO_MIME_TYPES = new Set<HostBridgeAudioMimeType>([
'audio/mpeg',
'audio/mp4',
'audio/wav',
'audio/ogg',
'audio/webm',
]);
const HOST_BRIDGE_AUDIO_MIME_TYPE_SET = new Set(HOST_BRIDGE_AUDIO_MIME_TYPES);
function normalizeHostAudioImportResult(
payload: FileImportAudioResult | null | undefined,
@@ -1072,7 +1054,7 @@ function normalizeHostAudioImportResult(
!payload ||
typeof payload !== 'object' ||
payload.action !== 'selected' ||
!HOST_BRIDGE_AUDIO_MIME_TYPES.has(payload.mimeType) ||
!HOST_BRIDGE_AUDIO_MIME_TYPE_SET.has(payload.mimeType) ||
typeof payload.fileName !== 'string' ||
!payload.fileName.trim() ||
typeof payload.base64Data !== 'string' ||