Skip to content

Commit 1f0375c

Browse files
committed
fix: 清理跨站动态快照
1 parent 0a7eeb1 commit 1f0375c

3 files changed

Lines changed: 35 additions & 1 deletion

File tree

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "stackprism",
33
"private": true,
4-
"version": "1.2.73",
4+
"version": "1.2.74",
55
"type": "module",
66
"description": "StackPrism 用于检测网页前端、后端、CDN、SaaS、广告营销、统计、登录、支付、网站程序和主题模板线索。",
77
"scripts": {

src/background/dynamic-snapshot.ts

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,20 @@ const buildDynamicSnapshotSignature = snapshot =>
5858
...snapshot.domMarkers
5959
].join('\n')
6060

61+
const getUrlOrigin = value => {
62+
try {
63+
return new URL(String(value || '')).origin
64+
} catch {
65+
return ''
66+
}
67+
}
68+
69+
const snapshotMatchesTabOrigin = (snapshot, tabUrl) => {
70+
const snapshotOrigin = getUrlOrigin(snapshot?.url)
71+
const tabOrigin = getUrlOrigin(tabUrl)
72+
return !snapshotOrigin || !tabOrigin || snapshotOrigin === tabOrigin
73+
}
74+
6175
const isLikelyDynamicLibraryFileName = name => {
6276
if (!name || name.length < 2 || name.length > 60) {
6377
return false
@@ -647,6 +661,9 @@ const processQueuedDynamicSnapshot = async tabId => {
647661
clearBadge(tabId)
648662
return
649663
}
664+
if (!snapshotMatchesTabOrigin(snapshot, tab.url)) {
665+
return
666+
}
650667

651668
const [data, rules, settings] = await Promise.all([getTabData(tabId), loadTechRules(), loadDetectorSettings()])
652669
data.dynamic = normalizeDynamicSnapshot(snapshot, buildEffectivePageRules(rules.page || {}, settings), data.dynamic)

src/background/index.ts

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,22 @@ const clearTabDetectionState = (tabId: number) => {
3737
clearTabSession(tabId).catch(() => {})
3838
}
3939

40+
const getUrlOrigin = (value: unknown): string => {
41+
try {
42+
return new URL(String(value || '')).origin
43+
} catch {
44+
return ''
45+
}
46+
}
47+
48+
const clearCrossOriginDynamicSnapshot = (data: any, nextUrl: string) => {
49+
const dynamicOrigin = getUrlOrigin(data?.dynamic?.url)
50+
const nextOrigin = getUrlOrigin(nextUrl)
51+
if (dynamicOrigin && nextOrigin && dynamicOrigin !== nextOrigin) {
52+
delete data.dynamic
53+
}
54+
}
55+
4056
chrome.tabs.onUpdated.addListener((tabId, changeInfo, tab) => {
4157
const url = changeInfo.url || tab.url || ''
4258
if (url && !isDetectablePageUrl(url)) {
@@ -85,6 +101,7 @@ chrome.webRequest.onHeadersReceived.addListener(
85101
}
86102
const record = buildHeaderRecord(details, rules.headers || {}, settings)
87103
if (details.type === 'main_frame') {
104+
clearCrossOriginDynamicSnapshot(data, details.url)
88105
data.main = shouldMergeHeaderRecords(data.main, record) ? mergeHeaderRecords(data.main, record) : record
89106
data.apis = []
90107
data.frames = []

0 commit comments

Comments
 (0)