Develop fill form (#10)

* feat(formRecognizer): 添加表单识别功能及相关组件

添加表单识别功能,包括以下内容:
1. 在路由配置中添加表单识别页面
2. 实现表单识别页面和侧边栏面板
3. 添加表单数据生成工具类
4. 实现与内容脚本的通信机制
5. 添加faker-js依赖用于生成测试数据
6. 支持不同入口点(popup/sidepanel)的组件渲染

* refactor(消息通信): 重构消息通信机制并集中管理消息协议

将分散的消息协议和通信逻辑集中到 utils/messages.ts 中
移除旧的 messages.tsx 文件并更新相关引用
添加消息动作枚举和类型定义,提高类型安全性
优化内容脚本注入失败时的处理逻辑
This commit is contained in:
LingandRX
2026-04-20 22:50:01 +08:00
committed by GitHub
parent be5e2f02ee
commit 0379f96e80
14 changed files with 1987 additions and 99 deletions
+22 -34
View File
@@ -1,5 +1,6 @@
import '../.wxt/types/imports.d.ts';
import { browser } from 'wxt/browser';
import { type MessagePayload, type MessageResponse } from '@/utils/messages';
export default defineBackground(() => {
// 监听扩展图标点击事件,打开侧边栏
@@ -20,40 +21,6 @@ export default defineBackground(() => {
} else if (reason === 'update') {
console.log('Extension updated to a new version');
}
// 获取所有标签页
const tabs = await browser.tabs.query({});
// 过滤不合法或受限制的 URL
const targetTabs = tabs.filter((tab) => {
if (!tab.id || !tab.url) return false;
const restrictedProtocols = [
'chrome:',
'chrome-extension:',
'about:',
'edge:',
'view-source:',
];
return !restrictedProtocols.some((protocol) => tab.url!.startsWith(protocol));
});
const results = await Promise.allSettled(
targetTabs.map((tab) =>
browser.scripting
.executeScript({
target: { tabId: tab.id! },
files: ['/content-scripts/content.js'],
})
.catch((err) => {
console.warn(`Failed to inject script into tab ${tab.id}:`, err.message);
}),
),
);
const successCount = results.filter((r) => r.status === 'fulfilled').length;
console.log(
`Successfully injected content script into ${successCount}/${targetTabs.length} tabs.`,
);
});
chrome.tabs.onUpdated.addListener((tabId, changeInfo) => {
@@ -61,4 +28,25 @@ export default defineBackground(() => {
console.log('加载完成的 Tab ID:', tabId);
}
});
// 监听来自 popup/sidepanel 的消息
chrome.runtime.onMessage.addListener(
(message: MessagePayload, sender, sendResponse: (response: MessageResponse) => void) => {
try {
// 处理跨标签页的消息转发
if (sender.tab) {
// 从内容脚本或弹出页面发送的消息
console.log('收到来自标签页的消息:', message.action);
sendResponse({ success: true, message: '消息已收到' });
} else {
// 从扩展其他部分发送的消息
console.log('收到来自扩展的消息:', message.action);
sendResponse({ success: true, message: '消息已收到' });
}
} catch (error) {
console.error('处理消息失败:', error);
sendResponse({ success: false, message: '处理消息失败' });
}
},
);
});