M0: 引入桥 JS(T-M0-06)
- WebViewJavascriptBridge.js 原样复刻到 feature_bridge/src/main/resources/rawfile (与原 Android assets 去尾随空白后逐字一致,lzyzsd 协议 100% 复刻) - BridgeJsLoader:从 rawfile 读取桥 JS(getRawFileContentSync + TextDecoder)并缓存, 供 M1 BridgeController 在 onPageEnd 注入;HarmonyOS 走 runJavaScript 无需去注释 - 经 build smoke 验证 rawfile 读取 API 签名与编译通过 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 4.8
parent
f7f208e6c8
commit
f89275ea4b
@@ -0,0 +1,32 @@
|
||||
/**
|
||||
* 桥 JS 读取器(《契约规范》§2.6,框架 §5.1)。
|
||||
*
|
||||
* 从 rawfile 读取 lzyzsd 原版 `WebViewJavascriptBridge.js`(与 Android 端逐字一致),
|
||||
* 供 BridgeController 在 `Web().onPageEnd` 时 `runJavaScript` 注入,使
|
||||
* `window.WebViewJavascriptBridge` 与 `WebViewJavascriptBridgeReady` 事件就绪。
|
||||
*
|
||||
* 注:原 Android 在注入前用正则去除以 `//` 开头的注释行(因 loadUrl("javascript:")
|
||||
* 不支持注释);HarmonyOS 走 `runJavaScript`,对 `//` 注释无此限制,可直接注入原文。
|
||||
* 首次读取后缓存,避免重复 IO。
|
||||
*/
|
||||
import { common } from '@kit.AbilityKit';
|
||||
import { util } from '@kit.ArkTS';
|
||||
|
||||
/** rawfile 中的桥 JS 文件名。 */
|
||||
export const BRIDGE_JS_RAWFILE: string = 'WebViewJavascriptBridge.js';
|
||||
|
||||
export class BridgeJsLoader {
|
||||
private static cache: string | undefined = undefined;
|
||||
|
||||
/** 读取并缓存桥 JS 文本。context 取自容器(UIAbilityContext 等)。 */
|
||||
static load(context: common.Context): string {
|
||||
const cached: string | undefined = BridgeJsLoader.cache;
|
||||
if (cached !== undefined) {
|
||||
return cached;
|
||||
}
|
||||
const bytes: Uint8Array = context.resourceManager.getRawFileContentSync(BRIDGE_JS_RAWFILE);
|
||||
const text: string = util.TextDecoder.create('utf-8').decodeToString(bytes);
|
||||
BridgeJsLoader.cache = text;
|
||||
return text;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user