🎨 Improve keyboard pop on HarmonyOS (Pura X)

Signed-off-by: Daniel <845765@qq.com>
This commit is contained in:
Daniel 2026-02-22 15:58:59 +08:00
parent 354124c42f
commit df4c6a63e8
No known key found for this signature in database
GPG key ID: 86211BA83DF03017
2 changed files with 13 additions and 1 deletions

View file

@ -14,7 +14,7 @@ import {hideElements} from "../../protyle/ui/hideElements";
import {softEnter} from "../../protyle/wysiwyg/enter";
import {isInAndroid, isInEdge, isInHarmony} from "../../protyle/util/compatibility";
import {tabCodeBlock} from "../../protyle/wysiwyg/codeBlock";
import {callMobileAppShowKeyboard, canInput} from "./mobileAppUtil";
import {callMobileAppShowKeyboard, canInput, keyboardLockUntil} from "./mobileAppUtil";
let renderKeyboardToolbarTimeout: number;
let showUtil = false;
@ -471,6 +471,12 @@ export const hideKeyboardToolbar = () => {
};
export const activeBlur = () => {
const now = Date.now();
if (now < keyboardLockUntil) {
console.warn(`activeBlur blocked by lock (remaining: ${keyboardLockUntil - now}ms)`);
return;
}
if (window.JSAndroid && window.JSAndroid.hideKeyboard) {
window.JSAndroid.hideKeyboard();
} else if (window.JSHarmony && window.JSHarmony.hideKeyboard) {

View file

@ -1,6 +1,12 @@
import {hasClosestByAttribute, hasClosestByClassName} from "../../protyle/util/hasClosest";
export let keyboardLockUntil = 0;
export const callMobileAppShowKeyboard = () => {
// 某些机型(比如鸿蒙 Pura X在弹起键盘后会立即触发 activeBlur 导致键盘被关闭,所以在主动唤起键盘时锁定一段时间,禁止 activeBlur 关闭键盘
// 每次主动唤起键盘时,锁定接下来的 300ms 不允许通过 activeBlur 关闭
keyboardLockUntil = Date.now() + 200;
if (window.JSAndroid && window.JSAndroid.showKeyboard) {
window.JSAndroid.showKeyboard();
} else if (window.JSHarmony && window.JSHarmony.showKeyboard) {