diff --git a/src/background.js b/src/background.js
index ae4abe7..592e5eb 100644
--- a/src/background.js
+++ b/src/background.js
@@ -8,6 +8,7 @@ import {
MSG_SAVE_RULE,
MSG_TRANS_TOGGLE_STYLE,
MSG_OPEN_TRANBOX,
+ MSG_CONTEXT_MENUS,
CMD_TOGGLE_TRANSLATE,
CMD_TOGGLE_STYLE,
CMD_OPEN_OPTIONS,
@@ -24,12 +25,9 @@ import { saveRule } from "./libs/rules";
globalThis.ContextType = "BACKGROUND";
/**
- * 插件安装
+ * 添加右键菜单
*/
-browser.runtime.onInstalled.addListener(() => {
- tryInitDefaultData();
-
- // 右键菜单
+function addContextMenus() {
browser.contextMenus.create({
id: CMD_TOGGLE_TRANSLATE,
title: browser.i18n.getMessage("toggle_translate"),
@@ -55,6 +53,28 @@ browser.runtime.onInstalled.addListener(() => {
title: browser.i18n.getMessage("open_options"),
contexts: ["all"],
});
+}
+
+/**
+ * 清除右键菜单
+ */
+function removeContextMenus() {
+ for (const id of [
+ CMD_TOGGLE_TRANSLATE,
+ CMD_TOGGLE_STYLE,
+ CMD_OPEN_TRANBOX,
+ CMD_OPEN_OPTIONS,
+ "options_separator",
+ ]) {
+ browser.contextMenus.remove(id);
+ }
+}
+
+/**
+ * 插件安装
+ */
+browser.runtime.onInstalled.addListener(() => {
+ tryInitDefaultData();
});
/**
@@ -64,14 +84,26 @@ browser.runtime.onStartup.addListener(async () => {
// 同步数据
await trySyncSettingAndRules();
+ const {
+ clearCache,
+ contextMenus = true,
+ subrulesList,
+ } = await getSettingWithDefault();
+
// 清除缓存
- const setting = await getSettingWithDefault();
- if (setting.clearCache) {
+ if (clearCache) {
tryClearCaches();
}
+ // 右键菜单
+ if (contextMenus) {
+ addContextMenus();
+ } else {
+ removeContextMenus();
+ }
+
// 同步订阅规则
- trySyncAllSubRules(setting);
+ trySyncAllSubRules({ subrulesList });
});
/**
@@ -105,6 +137,14 @@ browser.runtime.onMessage.addListener(
case MSG_SAVE_RULE:
saveRule(args);
break;
+ case MSG_CONTEXT_MENUS:
+ const { contextMenus } = args;
+ if (contextMenus) {
+ addContextMenus();
+ } else {
+ removeContextMenus();
+ }
+ break;
default:
sendResponse({ error: `message action is unavailable: ${action}` });
}
@@ -131,6 +171,9 @@ browser.commands.onCommand.addListener((command) => {
}
});
+/**
+ * 监听右键菜单
+ */
browser.contextMenus.onClicked.addListener(({ menuItemId }) => {
switch (menuItemId) {
case CMD_TOGGLE_TRANSLATE:
diff --git a/src/config/i18n.js b/src/config/i18n.js
index 64e9dfa..cd1ba1d 100644
--- a/src/config/i18n.js
+++ b/src/config/i18n.js
@@ -694,5 +694,9 @@ export const I18N = {
disable_langs_helper: {
zh: `此功能依赖准确的语言检测,建议启用远程语言检测。`,
en: `This feature relies on accurate language detection. It is recommended to enable remote language detection.`,
- }
+ },
+ add_context_menus: {
+ zh: `添加右键菜单`,
+ en: `Add Context Menus`,
+ },
};
diff --git a/src/config/index.js b/src/config/index.js
index 7e66bbd..b25edcc 100644
--- a/src/config/index.js
+++ b/src/config/index.js
@@ -63,6 +63,7 @@ export const MSG_OPEN_TRANBOX = "open_tranbox";
export const MSG_TRANS_GETRULE = "trans_getrule";
export const MSG_TRANS_PUTRULE = "trans_putrule";
export const MSG_TRANS_CURRULE = "trans_currule";
+export const MSG_CONTEXT_MENUS = "context_menus";
export const THEME_LIGHT = "light";
export const THEME_DARK = "dark";
@@ -431,6 +432,7 @@ export const DEFAULT_SETTING = {
injectRules: true, // 是否注入订阅规则
injectWebfix: true, // 是否注入修复补丁
detectRemote: false, // 是否使用远程语言检测
+ contextMenus: true, // 是否添加右键菜单
subrulesList: DEFAULT_SUBRULES_LIST, // 订阅列表
owSubrule: DEFAULT_OW_RULE, // 覆写订阅规则
transApis: DEFAULT_TRANS_APIS, // 翻译接口
diff --git a/src/views/Options/Setting.js b/src/views/Options/Setting.js
index 5f6c55f..fcacc51 100644
--- a/src/views/Options/Setting.js
+++ b/src/views/Options/Setting.js
@@ -25,10 +25,12 @@ import {
OPT_SHORTCUT_SETTING,
OPT_LANGS_TO,
DEFAULT_BLACKLIST,
+ MSG_CONTEXT_MENUS,
} from "../../config";
import { useShortcut } from "../../hooks/Shortcut";
import ShortcutInput from "./ShortcutInput";
import { useFab } from "../../hooks/Fab";
+import { sendBgMsg } from "../../libs/msg";
function ShortcutItem({ action, label }) {
const { shortcut, setShortcut } = useShortcut(action);
@@ -44,7 +46,6 @@ export default function Settings() {
const { fab, updateFab } = useFab();
const handleChange = (e) => {
- console.log("e", e);
e.preventDefault();
let { name, value } = e.target;
switch (name) {
@@ -66,6 +67,9 @@ export default function Settings() {
case "touchTranslate":
value = limitNumber(value, 0, 3);
break;
+ case "contextMenus":
+ sendBgMsg(MSG_CONTEXT_MENUS, { contextMenus: value });
+ break;
default:
}
updateSetting({
@@ -92,6 +96,7 @@ export default function Settings() {
newlineLength = TRANS_NEWLINE_LENGTH,
mouseKey = OPT_MOUSEKEY_DISABLE,
detectRemote = false,
+ contextMenus = true,
touchTranslate = 2,
blacklist = DEFAULT_BLACKLIST.join(",\n"),
disableLangs = [],
@@ -242,23 +247,38 @@ export default function Settings() {
{isExt ? (
-
- {i18n("if_clear_cache")}
-
-
-
- {i18n("clear_all_cache_now")}
-
-
-
+ <>
+
+ {i18n("add_context_menus")}
+
+
+
+
+ {i18n("if_clear_cache")}
+
+
+
+ {i18n("clear_all_cache_now")}
+
+
+
+ >
) : (
<>