diff --git a/src/config/i18n.js b/src/config/i18n.js
index 749f883..74284b5 100644
--- a/src/config/i18n.js
+++ b/src/config/i18n.js
@@ -1397,4 +1397,9 @@ export const I18N = {
en: `If you do not fully understand the default prompt, please do not modify it at will, otherwise the translation may fail.`,
zh_TW: `在未完全理解預設Prompt的情況下,請勿隨意修改,否則可能翻譯失敗。`,
},
+ if_pre_init: {
+ zh: `是否预初始化`,
+ en: `Whether to pre-initialize`,
+ zh_TW: `是否預初始化`,
+ },
};
diff --git a/src/config/setting.js b/src/config/setting.js
index 8f98f0a..a29c747 100644
--- a/src/config/setting.js
+++ b/src/config/setting.js
@@ -109,7 +109,7 @@ export const DEFAULT_SUBRULES_LIST = [
},
];
-export const DEFAULT_MOUSEHOVER_KEY = ["ControlLeft"];
+export const DEFAULT_MOUSEHOVER_KEY = ["KeyQ"];
export const DEFAULT_MOUSE_HOVER_SETTING = {
useMouseHover: true, // 是否启用鼠标悬停翻译
mouseHoverKey: DEFAULT_MOUSEHOVER_KEY, // 鼠标悬停翻译组合键
@@ -148,4 +148,5 @@ export const DEFAULT_SETTING = {
transInterval: 100, // 翻译等待时间
langDetector: OPT_TRANS_MICROSOFT, // 远程语言识别服务
mouseHoverSetting: DEFAULT_MOUSE_HOVER_SETTING, // 鼠标悬停翻译
+ preInit: true, // 是否预加载脚本
};
diff --git a/src/hooks/Storage.js b/src/hooks/Storage.js
index 165e789..dbf8bd5 100644
--- a/src/hooks/Storage.js
+++ b/src/hooks/Storage.js
@@ -53,9 +53,9 @@ export function useStorage(key, defaultVal = null, syncKey = "") {
// 远端同步
const runSync = useCallback(async (keyToSync, valueToSync) => {
try {
- const { value, isNew } = await syncData(keyToSync, valueToSync);
- if (isNew) {
- setData(value);
+ const res = await syncData(keyToSync, valueToSync);
+ if (res?.isNew) {
+ setData(res.value);
}
} catch (error) {
kissLog("Sync failed", keyToSync);
diff --git a/src/libs/sync.js b/src/libs/sync.js
index f6b6cbf..88751fc 100644
--- a/src/libs/sync.js
+++ b/src/libs/sync.js
@@ -70,7 +70,8 @@ export const syncData = async (key, value) => {
syncMeta = {},
} = await getSyncWithDefault();
if (!syncUrl || !syncKey || (syncType === OPT_SYNCTYPE_WEBDAV && !syncUser)) {
- throw new Error("sync args err");
+ // throw new Error("sync args err");
+ return;
}
let { updateAt = 0, syncAt = 0 } = syncMeta[key] || {};
diff --git a/src/libs/translator.js b/src/libs/translator.js
index ee648d9..67b5bcc 100644
--- a/src/libs/translator.js
+++ b/src/libs/translator.js
@@ -325,13 +325,19 @@ export class Translator {
this.#enableMouseHover();
}
- // 是否默认启动
+ if (document.readyState === "loading") {
+ document.addEventListener("DOMContentLoaded", () => this.#run());
+ } else {
+ this.#run();
+ }
+ }
+
+ // 启动
+ #run() {
if (this.#rule.transOpen === "true") {
- if (document.readyState === "loading") {
- document.addEventListener("DOMContentLoaded", () => this.enable());
- } else {
- this.enable();
- }
+ this.enable();
+ } else if (this.#setting.preInit) {
+ this.#init();
}
}
@@ -1242,13 +1248,17 @@ export class Translator {
// 注入JS/CSS
#initInjector() {
- const { injectJs, injectCss } = this.#rule;
- if (isExt) {
- injectJs && sendBgMsg(MSG_INJECT_JS, injectJs);
- injectCss && sendBgMsg(MSG_INJECT_CSS, injectCss);
- } else {
- injectJs && injectInlineJs(injectJs);
- injectCss && injectInternalCss(injectCss);
+ try {
+ const { injectJs, injectCss } = this.#rule;
+ if (isExt) {
+ injectJs && sendBgMsg(MSG_INJECT_JS, injectJs);
+ injectCss && sendBgMsg(MSG_INJECT_CSS, injectCss);
+ } else {
+ injectJs && injectInlineJs(injectJs);
+ injectCss && injectInternalCss(injectCss);
+ }
+ } catch (err) {
+ kissLog("inject js");
}
}
diff --git a/src/views/Options/Apis.js b/src/views/Options/Apis.js
index fd100d4..d1e80df 100644
--- a/src/views/Options/Apis.js
+++ b/src/views/Options/Apis.js
@@ -282,7 +282,7 @@ function ApiFields({ apiSlug, isUserApi, deleteApi }) {
<>
-
+
{/* todo: 改成 ReusableAutocomplete 可选择和填写模型 */}
-
+
-
+
-
+
-
+
@@ -485,7 +485,7 @@ function ApiFields({ apiSlug, isUserApi, deleteApi }) {
{API_SPE_TYPES.batch.has(api.apiType) && (
-
+
{i18n("enable")}
-
+
-
+
-
+
-
+
{" "}
{i18n("enable")}
-
+
{" "}
-
+
-
+
-
+
-
+
-
+
-
- {enabledApis.map((api) => (
-
- ))}
-
-
-
- {OPT_LANGS_FROM.map(([lang, name]) => (
-
- ))}
-
-
-
- {OPT_LANGS_TO.map(([lang, name]) => (
-
- ))}
-
-
-
-
- {OPT_INPUT_TRANS_SIGNS.map((item) => (
-
- ))}
-
+
+
+
+
+ {enabledApis.map((api) => (
+
+ ))}
+
+
+
+
+ {OPT_LANGS_FROM.map(([lang, name]) => (
+
+ ))}
+
+
+
+
+ {OPT_LANGS_TO.map(([lang, name]) => (
+
+ ))}
+
+
+
+
+
+ {OPT_INPUT_TRANS_SIGNS.map((item) => (
+
+ ))}
+
+
+
+
-
+
-
+
-
+
-
+
{i18n("default_disabled")}
-
+
{i18n("enable")}
-
+
{i18n("enable")}
-
+
{i18n("enable")}
-
+
+
{i18n("enable")}
-
+
{i18n("enable")}
-
-
-
-
-
- {/*
+
{GlobalItem}
- {OPT_TIMING_ALL.map((item) => (
-
- ))}
+
+
- */}
-
+
+
{i18n("enable")}
-
+
+
-
+
-
+
-
+ {/*
{GlobalItem}
- {OPT_STYLE_ALL.map((item) => (
+ {OPT_TIMING_ALL.map((item) => (
))}
-
- {OPT_STYLE_USE_COLOR.includes(textStyle) && (
-
-
-
- )}
-
-
+ */}
- {textStyle === OPT_STYLE_DIY && (
-
- )}
-
-
-
-
-
- {GlobalItem}
-
-
-
-
-
+
+
+
+
+
+ {GlobalItem}
+ {OPT_STYLE_ALL.map((item) => (
+
+ ))}
+
+
+
+
+
+
+
+
+ {textStyle === OPT_STYLE_DIY && (
+
+ )}
+
{showMore && (
<>
- {/*
-
- {GlobalItem}
- {FIXER_ALL.map((item) => (
-
- ))}
- */}
-
{
try {
- await updateSetting(JSON.parse(data));
+ updateSetting(JSON.parse(data));
} catch (err) {
kissLog("import setting", err);
}
@@ -121,6 +117,7 @@ export default function Settings() {
csplist = DEFAULT_CSPLIST.join(",\n"),
transInterval = 100,
langDetector = OPT_TRANS_MICROSOFT,
+ preInit = true,
} = setting;
const { isHide = false, fabClickAction = 0 } = fab || {};
@@ -142,158 +139,195 @@ export default function Settings() {
/>
-
- {i18n("ui_lang")}
-
-
-
-
-
-
-
-
-
-
-
-
- {i18n("touch_translate_shortcut")}
-
-
-
-
- {i18n("hide_fab_button")}
-
-
-
-
- {i18n("fab_click_action")}
-
-
-
-
- {i18n("context_menus")}
-
-
-
-
- {i18n("detect_lang_remote")}
-
-
+
+
+
+
+ {UI_LANGS.map(([lang, name]) => (
+
+ ))}
+
+
+
+
+
+
+
+
+
+ {
+ updateFab({ isHide: e.target.value });
+ }}
+ >
+
+
+
+
+
+ updateFab({ fabClickAction: e.target.value })}
+ >
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {[0, 2, 3, 4].map((item) => (
+
+ ))}
+
+
+
+
+
+
+
+
+
+
+
+ {OPT_LANGDETECTOR_ALL.map((item) => (
+
+ ))}
+
+
+
+
{isExt ? (
<>
-
- {i18n("if_clear_cache")}
-
-
+
{i18n("clear_all_cache_now")}
-
-
+ }
+ >
+
+
+
-
+
-
+
-
+
-
+
{i18n("selected_translation_alert")}
-
- {enabledApis.map((api) => (
-
- ))}
-
-
- {OPT_LANGS_FROM.map(([lang, name]) => (
-
- ))}
-
+
+
+
+
+ {enabledApis.map((api) => (
+
+ ))}
+
+
+
+
+ {OPT_LANGS_FROM.map(([lang, name]) => (
+
+ ))}
+
+
+
+
+ {OPT_LANGS_TO.map(([lang, name]) => (
+
+ ))}
+
+
+
+
+ {[["none", "None"], ...OPT_LANGS_TO].map(([lang, name]) => (
+
+ ))}
+
+
-
- {OPT_LANGS_TO.map(([lang, name]) => (
-
- ))}
-
+
+
+
+
+
+
+
+
+ {OPT_TRANBOX_TRIGGER_ALL.map((item) => (
+
+ ))}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
- {[["none", "None"], ...OPT_LANGS_TO].map(([lang, name]) => (
-
- ))}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {OPT_TRANBOX_TRIGGER_ALL.map((item) => (
-
- ))}
-
+
+
+
+
+
+
+
+
+
+
+
+
+ {!isExt && (
+
+
+
+ )}
+
+
-
- {!isExt && (
-
- )}
);