Skip to content

Commit c38d00e

Browse files
committed
optimized open-tab singleton mechanism
1 parent 3107d66 commit c38d00e

File tree

1 file changed

+10
-8
lines changed

1 file changed

+10
-8
lines changed

src/background/messages/open-tab.ts

+10-8
Original file line numberDiff line numberDiff line change
@@ -5,24 +5,26 @@ export type RequestBody = {
55
tab?: string
66
active?: boolean
77
params?: Record<string, string>
8-
singleton?: boolean
8+
singleton?: boolean | string[]
99
}
1010

1111
const handler: PlasmoMessaging.MessageHandler<RequestBody, chrome.tabs.Tab> = async (req, res) => {
1212
const { url, tab, active } = req.body
1313
const queryString = req.body.params ? `?${new URLSearchParams(req.body.params).toString()}` : ''
1414
const fullUrl = tab ? chrome.runtime.getURL(`/tabs/${tab}.html${queryString}`) : url + queryString
15+
const pathUrl = (tab ? chrome.runtime.getURL(`/tabs/${tab}.html`) : url) + '*'
1516
if (req.body.singleton) {
16-
const tabs = await chrome.tabs.query({ url: fullUrl })
17-
if (tabs.length) {
18-
const tab = tabs[0]
19-
await chrome.tabs.update(tab.id, { active: true })
20-
res.send(tab)
17+
const tabs = await chrome.tabs.query({ url: typeof req.body.singleton === 'boolean' ? fullUrl : pathUrl })
18+
const tab = tabs.find(tab =>
19+
typeof req.body.singleton === 'boolean' ||
20+
req.body.singleton.some(param => new URL(tab.url).searchParams.get(param) === req.body.params[param])
21+
)
22+
if (tab) {
23+
res.send(await chrome.tabs.update(tab.id, { active: true }))
2124
return
2225
}
2326
}
24-
const result = await chrome.tabs.create({ url: fullUrl, active })
25-
res.send(result)
27+
res.send(await chrome.tabs.create({ url: fullUrl, active }))
2628
}
2729

2830

0 commit comments

Comments
 (0)