跳转到正文
Doc简单文档
← 返回文档列表

Context右键菜单

更新于 2026-09-04 14:57 91 次阅读 0 个附件
一款面向 EMLOG 博客系统https://www.emlog.net 的自定义右键菜单插件。插件替换浏览器默认右键菜单,把常用的页面操作与站点导航集中到一个右键菜单中,各菜单项均可在后台一键开关、按需展示。 ---

Context右键菜单(EMLOG 插件)

一款面向 EMLOG 博客系统自定义右键菜单插件。插件替换浏览器默认右键菜单,把常用的页面操作与站点导航集中到一个右键菜单中,各菜单项均可在后台一键开关、按需展示。


功能特性

  • 替换默认右键菜单:页面任意位置右键即可呼出自定义菜单,操作集中、风格统一。
  • 16 个可选菜单项:返回顶部、滚到底部、后退、前进、刷新、站点首页、随机文章、深色模式、复制选中内容、链接操作、图片操作等,全部可在后台独立开关。
  • 上下文智能菜单:菜单内容随右键位置动态变化——选中文字时出现「复制选中内容」;右键在链接上时出现「查看/复制链接」;右键在图片上时出现「查看/复制图片」。
  • 页面类菜单项可自定义跳转:隐私协议、用户协议、全部分类、全部标签四项,支持绑定站内单页或自定义链接;未配置目标时对应菜单项自动隐藏。
  • 深色模式一键切换:菜单内可直接切换整站深色/浅色外观,并记住访客选择;菜单外观自动跟随站点深浅状态。
  • 保留输入场景原生菜单:在输入框、文本域、可编辑区域中右键时,自动放行系统原生菜单,不影响复制粘贴等编辑操作。
  • 主题外观自适应:菜单主题支持 自动 / 浅色 / 深色 三档,浅色主题可跟随系统偏好自动切换。
  • 轻量无依赖:纯原生 JavaScript 实现,无 jQuery、无第三方库,样式与主题完全隔离,不污染博客页面。
  • 绿色安装/卸载:启用时写入默认配置,停用仅清理本插件自身的存储数据,不影响站点其他内容。

环境要求

项目 要求
博客平台 EMLOG Pro / EMLOG 6.x(需支持 StorageInputUrl::plugin 等 API)
服务端 PHP 7.0 及以上
浏览器 支持 ES5 与现代 CSS 变量的主流浏览器(Chrome / Firefox / Edge / Safari)

安装方法

  1. 下载插件源码,将整个目录命名为 lcbk_contextmenu
  2. lcbk_contextmenu 目录上传到博客的 content/plugins/ 目录下。
  3. 登录 EMLOG 后台,进入 插件 页面,找到「Context右键菜单」,点击 启用
  4. 启用后点击插件右侧的 设置 进入配置页。

启用插件后,无需修改主题,前台即会自动注入样式与脚本(通过 index_head 挂载点输出)。


后台设置说明

配置入口:后台 → 插件 → Context右键菜单 → 设置(/admin/plugin.php?plugin=lcbk_contextmenu

基础设置

配置项 说明 默认值
启用前台右键菜单 插件总开关,关闭后前台不再输出任何内容 开启
在输入框/文本域/可编辑区域保留系统原生右键菜单 开启后在这些区域内右键时显示浏览器原生菜单,不影响文本编辑操作 开启
菜单外观主题 自动(跟随站点/系统深浅)、浅色深色 三选一 自动
主题深色标记方式 插件切换 <html> 上的深色标记以让主题换肤,可选 class + data-theme(两者都写)/ 仅 class="dark" / 仅 data-theme="dark" class + data-theme

深色标记方式怎么选? 若你的主题通过监听 html 上的 class="dark" 来切换深色,选「仅 class」;若主题通过 data-theme="dark" 属性切换,选「仅 data-theme」;不确定时保持默认「两者都写」,兼容性最好。插件只切换标记触发主题换肤,自身外观自动跟随,互不叠加滤镜。

菜单项开关

以下菜单项通过开关独立控制,默认全部开启:

菜单项 行为
返回顶部 平滑滚动回页面顶部
滚到底部 平滑滚动到页面最底部
后退 浏览器历史后退(无历史时提示)
前进 浏览器历史前进
刷新 重新加载当前页面
站点首页 跳转博客首页
随机文章 点击直接随机跳转到一篇日志
深色模式 一键切换整站深浅色并记住访客选择(菜单项文字/图标随状态切换)
复制选中内容 仅在页面存在选中文字时出现
链接操作 仅右键在链接上时出现(新标签打开 / 复制链接地址)
图片操作 仅右键在图片上时出现(新标签打开 / 复制图片地址)

站内单页 / 自定义链接菜单项

隐私协议、用户协议、全部分类、全部标签四个菜单项遵循同一套规则:

  • 必须同时满足「显示开关已勾选」且「目标链接已填写」,才会出现在前台右键菜单中;两者缺一则该菜单项不展示。
  • 目标链接支持两种写法
    • 站内单页编号(纯数字,即 Page 的 ID),如 3
    • http(s):// 开头的站外链接或 / 开头的站内绝对路径,如 https://example.com/privacy
  • 「站内单页快捷选择」下拉框会自动列出站内全部单页,选中后自动把对应 ID 填入目标链接输入框。
  • 菜单显示名称留空时使用默认文案(隐私协议 / 用户协议 / 全部分类 / 全部标签),填写后使用自定义名称。
  • 「全部分类」「全部标签」既可直接跳到某个分类/标签聚合页,也可指向后台的分类管理/标签管理地址(默认关闭,需自行开启并配置目标)。

配置完成后点击「保存设置」即可生效。


前台使用说明

右键(contextmenu)页面任意区域即可呼出菜单,菜单内容会根据右键位置动态调整,菜单在屏幕边缘会自动贴边反转,不会溢出可视区。

关闭菜单的方式:点击菜单外部、滚动页面、改变窗口大小、切换窗口、按下 Esc,或在已展开的菜单上再次右键。

菜单中的操作支持 中键(鼠标滚轮点击)快速触发;普通左键点击项为关闭菜单后执行。

深色模式的记忆逻辑

  • 访客在菜单中手动切换过深浅色后,选择会被记入浏览器本地存储(localStorage),下次访问自动应用。
  • 从未手动切换过的访客,菜单与页面完全跟随主题当前状态,插件不做任何干预。

随机文章跳转原理

「随机文章」菜单项调用插件内置入口:

/?plugin=lcbk_contextmenu&action=rand
/plugin/lcbk_contextmenu/rand   (静态伪静态路由)

该入口从数据库中随机取一篇日志后直接 302 跳转,同时对响应输出 X-Robots-Tag: noindex,避免被搜索引擎收录中间跳转页。取不到日志时兜底跳回站点首页。该入口无前台展示页面,未知入口访问一律跳回首页。


文件结构

lcbk_contextmenu/
├── lcbk_contextmenu.php              # 插件主文件:声明信息、路由、前台 head 输出与配置数据组装
├── lcbk_contextmenu_setting.php      # 后台设置页(视图 + 保存逻辑,仅管理员可见)
├── lcbk_contextmenu_callback.php     # 插件事件回调:启用写默认配置 / 更新清理废弃键 / 删除清理数据
├── lcbk_contextmenu_show.php         # 插件前台入口:随机文章跳转(noindex)
├── config.php                        # 默认配置、配置读取与保存
├── menu.js                           # 前台核心脚本:菜单构建、事件绑定、深色切换、复制逻辑
├── style.css                         # 前台样式:浅色/深色/自动主题变量,与主题样式隔离
└── preview.jpg                       # 插件预览图(EMLOG 插件列表展示用)
文件 职责
lcbk_contextmenu.php 插件头信息声明、Url::plugin 内部路由、index_head 挂载点输出、前端 JSON 配置组装
lcbk_contextmenu_setting.php 后台设置页视图渲染与表单保存(校验菜单项开关、主题、深色标记方式及页面类菜单项目标)
lcbk_contextmenu_callback.php EMLOG 生命周期回调:callback_init 写入默认配置、callback_up 清理废弃配置键、callback_rm 绿色卸载
lcbk_contextmenu_show.php 前台展示入口,实现随机文章跳转;兼容 ?plugin= 与伪静态两种访问形式
config.php 提供默认配置结构与 Storage 读写封装,读取时递归合并默认值保证键完整
menu.js 菜单 DOM 构建、上下文识别(选中文字/链接/图片)、边界贴边定位、深色切换与本地记忆、复制与提示
style.css 菜单/分隔线/提示样式,基于 CSS 变量实现浅色、深色与自动跟随三套外观

数据存储与卸载说明

  • 插件配置通过 EMLOG Storage 组件存储,键名为 lcbk_contextmenu
  • 升级插件callback_up 会自动清理历史遗留的废弃配置键(如早期版本的随机列表模式、深色初始状态),无需手动处理。
  • 停用插件:会删除本插件写入的全部配置数据,卸载干净,不残留垃圾数据,也不改动博客其他任何数据。

常见问题(FAQ)

Q:启用后前台没有任何变化? 先确认后台「启用前台右键菜单」已勾选且至少有一个菜单项处于有效状态;其次确认主题模板的 header 中正常执行了 EMLOG 的 index_head 挂载点(部分自定义主题会遗漏该钩子)。页面类菜单项(隐私/用户协议/分类/标签)还需同时满足「勾选显示 + 填写目标链接」才会展示。

Q:菜单为什么在输入框里不出现? 默认开启「在输入框/文本域/可编辑区域保留系统原生右键菜单」,这是有意为之,保证文本编辑场景可用原生复制粘贴。如需在这些区域也使用自定义菜单,在后台关闭该项即可。

Q:切深色模式后网页颜色不变化? 插件的深色模式依赖主题自身的深色换肤机制,仅切换 html 上的 class="dark" / data-theme="dark" 标记。若主题不使用这两种标记换肤,请改用主题自带的深色切换;若主题已使用其中一种,请到后台把「主题深色标记方式」调整为对应选项。

Q:隐私协议菜单项不显示? 检查该项「显示」开关是否勾选、目标链接是否填写。目标链接必须为站内单页编号、http(s):// 外链或 / 开头的站内路径,非法或留空均不会展示该项。

Q:随机文章点击后没有跳转? 确认「随机文章」开关已开启,且站点至少存在一篇已发布日志。该功能使用插件内置跳转页,无需额外配置目标链接。


更新日志

v1.0.0

  • 首个正式版本。
  • 提供自定义右键菜单,含页面工具、站点导航、深色模式、复制选中内容、链接/图片操作共 11 类快捷项,另含 4 个可绑定站内单页或自定义链接的页面类菜单项。
  • 支持菜单浅色 / 深色 / 自动三套主题,深色标记方式可配置。
  • 保留输入区域原生右键菜单,随机文章使用 noindex 中间跳转,卸载自动清理数据。

免责声明

本插件为 EMLOG 生态的免费开源插件,按「现状」提供,作者不对使用本插件造成的任何直接或间接损失承担责任。使用前建议先在测试环境验证兼容性,并做好站点备份。