feat:
1、并发进行脚本注入 2、完善过滤逻辑
This commit is contained in:
+33
-16
@@ -15,23 +15,40 @@ export default defineBackground(() => {
|
|||||||
console.log('Extension updated to a new version');
|
console.log('Extension updated to a new version');
|
||||||
}
|
}
|
||||||
|
|
||||||
// 给所有已打开的标签页注入 content script
|
// 获取所有标签页
|
||||||
for (const tab of await browser.tabs.query({})) {
|
const tabs = await browser.tabs.query({});
|
||||||
if (tab.url?.match(/(chrome|chrome-extension):\/\//gi) || !tab.id) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
// 注入 content script
|
// 过滤不合法或受限制的 URL
|
||||||
try {
|
const targetTabs = tabs.filter((tab) => {
|
||||||
const res = await browser.scripting.executeScript({
|
if (!tab.id || !tab.url) return false;
|
||||||
target: { tabId: tab.id },
|
// 过滤掉浏览器内部页面和不支持注入的协议
|
||||||
files: ['/content-scripts/content.js'],
|
const restrictedProtocols = [
|
||||||
});
|
'chrome:',
|
||||||
console.log('Content script injected on installed/updated:', res);
|
'chrome-extension:',
|
||||||
} catch (error) {
|
'about:',
|
||||||
console.error('Failed to inject content script:', error);
|
'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.`,
|
||||||
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
// 监听来自 popup script 的消息
|
// 监听来自 popup script 的消息
|
||||||
|
|||||||
Reference in New Issue
Block a user