开发者工具提示信息功能添加教程

分钟
开发者工具提示信息功能添加教程
AI 概括

点击按钮,AI 将为你生成这篇文章的摘要

一、功能介绍

开发者工具提示信息功能是一种当用户按下快捷键打开浏览器开发者工具时,自动弹出提示信息的功能。

功能作用

作用说明
提醒用户合法使用开发者工具告知用户网站的使用规范
保护网站内容不被随意复制起到一定的威慑作用
展示网站使用条款明确网站的使用规则
提升用户体验友好的提示而非强制阻止

功能特点

  • 支持所有主流浏览器(Chrome、Firefox、Edge、Safari)
  • 响应式设计,适配各种屏幕尺寸
  • 支持暗色模式
  • 可自定义提示信息内容
  • 可配置显示时长
  • 仅在首次打开开发者工具时显示
  • 不影响正常开发工作

二、实现原理

该功能通过监听键盘事件来检测用户是否按下了打开开发者工具的快捷键,当检测到快捷键时,动态创建一个提示框并显示给用户。

监听的快捷键

快捷键浏览器
F12所有浏览器通用
Ctrl+Shift+I检查元素
Ctrl+Shift+J打开控制台
Ctrl+Shift+C元素选择器
Cmd+Option+IMac 系统
Cmd+Option+JMac 系统
Cmd+Option+CMac 系统

工作流程

用户按下快捷键
检测到开发者工具快捷键
首次显示?→ 是 → 显示提示框
显示进度条动画
动画结束,隐藏提示框

三、完整代码实现

步骤 1:创建组件文件

在项目中创建以下文件:

src/components/features/DevToolsWarning.astro

完整代码:

---
import { siteConfig } from "@/config";
const devtoolsWarning = siteConfig.devtoolsWarning || false;
---
<script is:inline define:vars={{ devtoolsWarning }}>
(function () {
const style = document.createElement("style");
style.textContent = `
#devtools-warning {
position: fixed;
top: 20px;
left: 50%;
transform: translateX(-50%) translateY(-150px);
background: var(--card-bg, #fff);
color: var(--text-primary, #1f2937);
padding: 0;
border-radius: 12px;
box-shadow: 0 4px 20px rgba(0,0,0,0.15);
transition: transform 0.3s ease, opacity 0.3s ease;
z-index: 999999;
font-family: var(--font-sans, -apple-system, BlinkMacSystemFont, sans-serif);
min-width: 320px;
max-width: 400px;
overflow: hidden;
opacity: 0;
pointer-events: none;
border: 1px solid var(--line-divider, rgba(0,0,0,0.05));
}
:root.dark #devtools-warning {
background: var(--card-bg, #1f2937);
color: var(--text-primary, #f9fafb);
border-color: var(--line-divider, rgba(255,255,255,0.1));
}
#devtools-warning.show {
transform: translateX(-50%) translateY(0);
opacity: 1;
}
#devtools-warning.hide {
transform: translateX(-50%) translateY(-150px);
opacity: 0;
}
#devtools-warning-content {
padding: 16px 20px;
display: flex;
align-items: center;
gap: 12px;
}
#devtools-warning-icon {
width: 28px;
height: 28px;
flex-shrink: 0;
background: #fbbf24;
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
color: #fff;
font-size: 16px;
font-weight: bold;
line-height: 1;
}
#devtools-warning-text {
flex: 1;
font-size: 14px;
font-weight: 500;
line-height: 1.4;
color: var(--text-primary, #1f2937);
}
:root.dark #devtools-warning-text {
color: var(--text-primary, #f9fafb);
}
#devtools-warning-progress {
height: 3px;
background: var(--line-divider, rgba(0,0,0,0.05));
width: 100%;
position: relative;
overflow: hidden;
}
:root.dark #devtools-warning-progress {
background: var(--line-divider, rgba(255,255,255,0.1));
}
#devtools-warning-progress-bar {
position: absolute;
top: 0;
left: 0;
height: 100%;
width: 100%;
background: var(--primary, #6366f1);
transform-origin: left;
transform: scaleX(1);
}
#devtools-warning-progress-bar.animate {
animation: shrink ${devtoolsWarning.time}s linear forwards;
}
@keyframes shrink {
from { transform: scaleX(1); }
to { transform: scaleX(0); }
}
`;
document.head.appendChild(style);
const warning = document.createElement("div");
warning.id = "devtools-warning";
warning.innerHTML = `
<div id="devtools-warning-content">
<div id="devtools-warning-icon">!</div>
<div id="devtools-warning-text">${devtoolsWarning.message || "检测到开发者工具已打开"}</div>
</div>
<div id="devtools-warning-progress">
<div id="devtools-warning-progress-bar"></div>
</div>
`;
document.body.appendChild(warning);
let hasShown = false;
function showWarning() {
if (hasShown) return;
hasShown = true;
const progressBar = warning.querySelector("#devtools-warning-progress-bar");
warning.classList.add("show");
progressBar.classList.add("animate");
const onProgressComplete = () => {
warning.classList.remove("show");
warning.classList.add("hide");
setTimeout(() => warning.remove(), 300);
};
progressBar.addEventListener("animationend", onProgressComplete, { once: true });
}
document.addEventListener("keydown", (e) => {
if (hasShown) return;
if (e.key === "F12") {
showWarning();
return;
}
if (e.ctrlKey && e.shiftKey && e.key.toUpperCase() === "I") {
showWarning();
return;
}
if (e.ctrlKey && e.shiftKey && e.key.toUpperCase() === "J") {
showWarning();
return;
}
if (e.ctrlKey && e.shiftKey && e.key.toUpperCase() === "C") {
showWarning();
return;
}
if (e.metaKey && e.altKey && e.key.toUpperCase() === "I") {
showWarning();
return;
}
if (e.metaKey && e.altKey && e.key.toUpperCase() === "J") {
showWarning();
return;
}
if (e.metaKey && e.altKey && e.key.toUpperCase() === "C") {
showWarning();
return;
}
});
})();
</script>

步骤 2:修改配置类型

打开 src/types/config.ts,在 SiteConfig 类型中添加:

// 开发者工具提示信息配置
devtoolsWarning?: {
enable: boolean; // 是否启用
message?: string; // 提示信息内容,留空为默认
time?: number; // 提示信息显示时间,单位秒
};

步骤 3:添加配置

打开 src/config/siteConfig.ts,在配置对象中添加:

// 开发者工具提示信息配置
devtoolsWarning: {
enable: true, // 是否启用
message: "请按本站规定合法使用开发者工具", // 提示信息内容
time: 3, // 提示信息显示时间,单位秒
},

步骤 4:在布局中使用组件

打开 src/layouts/MainGridLayout.astro,添加导入和使用:

导入组件:

---
import DevToolsWarning from "@components/features/DevToolsWarning.astro";
// ... 其他导入
---

使用组件:

{siteConfig.devtoolsWarning?.enable && <DevToolsWarning />}

四、配置说明

配置参数

参数类型默认值说明
enablebooleantrue是否启用功能
messagestring”检测到开发者工具已打开”提示信息内容
timenumber3显示时间(秒)

自定义提示信息

修改 message 字段来自定义提示信息:

devtoolsWarning: {
enable: true,
message: "你的自定义提示信息",
time: 3
}

自定义显示时长

修改 time 字段来设置显示时长(单位:秒):

devtoolsWarning: {
enable: true,
message: "提示信息",
time: 5 // 显示5秒
}

禁用功能

enable 设置为 false

devtoolsWarning: {
enable: false
}

五、使用方法

启用功能

  1. 确保 devtoolsWarning.enable 设置为 true
  2. 重新构建或重启开发服务器

测试功能

  1. 打开浏览器访问博客
  2. 按下 F12 或 Ctrl+Shift+I
  3. 观察页面顶部是否弹出提示框

查看效果

  • 提示框从顶部滑入
  • 显示配置的提示信息
  • 底部有进度条动画
  • 动画结束后自动隐藏

六、注意事项

1. 浏览器兼容性

该功能在以下浏览器中测试通过:

浏览器支持情况
Chrome✅ 完全支持
Firefox✅ 完全支持
Edge✅ 完全支持
Safari✅ 完全支持

2. 快捷键检测限制

由于浏览器安全限制,某些快捷键可能无法被完全拦截:

  • Ctrl+Shift+I:部分浏览器可能先打开开发者工具再显示提示
  • F12:大多数浏览器都能正常检测

3. 仅首次显示

功能设计为仅在首次打开开发者工具时显示,避免重复打扰用户。

4. 不影响开发

  • 提示框会自动消失
  • 不阻止开发者工具打开
  • 不影响正常的开发调试工作

5. CSS 变量兼容

组件使用了 CSS 变量,确保主题中定义了以下变量:

  • --card-bg:卡片背景色
  • --text-primary:主要文本色
  • --line-divider:分割线颜色
  • --primary:主题色

七、常见问题

Q1: 提示框不显示?

可能原因:

  • 配置未正确添加
  • 组件未正确导入
  • 浏览器不支持某些快捷键检测

解决方案:

  1. 检查 siteConfig.ts 中的配置
  2. 确认组件已正确导入和使用
  3. 尝试不同的快捷键测试

Q2: 提示框样式不正确?

可能原因:

  • CSS 变量未定义
  • 主题样式冲突

解决方案:

  1. 检查主题中是否定义了相关 CSS 变量
  2. 检查是否有其他样式覆盖

Q3: 每次刷新都显示?

可能原因:

  • 代码中 hasShown 变量每次刷新都会重置

解决方案: 这是正常行为,因为提示框是动态创建的,不会持久化存储。如果需要持久化,可以使用 localStorage

Q4: 如何修改提示框样式?

解决方案: 修改组件中的 CSS 样式即可,主要样式包括:

#devtools-warning {
/* 提示框容器样式 */
}
#devtools-warning-icon {
/* 图标样式 */
}
#devtools-warning-text {
/* 文本样式 */
}
#devtools-warning-progress-bar {
/* 进度条样式 */
}

八、总结

本教程为 Firefly Astro 博客添加了开发者工具提示信息功能,通过修改 4 个文件实现:

文件修改内容
src/components/features/DevToolsWarning.astro新建组件文件
src/types/config.ts添加类型定义
src/config/siteConfig.ts添加配置参数
src/layouts/MainGridLayout.astro导入并使用组件

功能特点:

  • 支持所有主流浏览器
  • 响应式设计,适配各种屏幕尺寸
  • 支持暗色模式
  • 可自定义提示信息内容
  • 可配置显示时长
  • 仅在首次打开开发者工具时显示
  • 不影响正常开发工作

现在当用户按下快捷键打开开发者工具时,会看到一个美观的提示框!🎉

支持与分享

如果这篇文章对你有帮助,欢迎分享给更多人或赞助支持!

赞助
开发者工具提示信息功能添加教程
https://f3f3.top/posts/devtools-warning/
作者
lyf
发布于
2026-06-07
许可协议
CC BY-NC-SA 4.0

评论区

Profile Image of the Author
lyf
Hello, I'm LyF.
公告
欢迎来到一飞的博客!。
音乐
封面

音乐

暂未播放

0:00 0:00
暂无歌词
我和宝宝在一起已经
---------TSH ❤️ CXY---------
---------TSH
❤️
CXY---------
0 0 0 0 0 00
分类
标签
站点统计
文章
17
分类
5
标签
24
总字数
51,329
运行时长
0
最后活动
0 天前

文章目录

🤖 AI 助手

👋 你好!

我可以帮你解答关于这篇文章的问题