diff --git a/web/packages/extension/src/background.ts b/web/packages/extension/src/background.ts index cdf97c5fbe90..ffab69904eb9 100644 --- a/web/packages/extension/src/background.ts +++ b/web/packages/extension/src/background.ts @@ -248,13 +248,18 @@ async function onAdded( function onMessage( request: unknown, - _sender: chrome.runtime.MessageSender, + sender: chrome.runtime.MessageSender, _sendResponse: (response: unknown) => void, ): void { if (isMessage(request)) { if (request.type === "open_url_in_player") { + const index = + sender.tab?.index !== undefined + ? sender.tab.index + 1 + : undefined; chrome.tabs.create({ url: utils.runtime.getURL(`player.html#${request.url}`), + index, }); } } diff --git a/web/packages/extension/src/utils.ts b/web/packages/extension/src/utils.ts index 35815cf2ff55..80c57ce193e9 100644 --- a/web/packages/extension/src/utils.ts +++ b/web/packages/extension/src/utils.ts @@ -37,21 +37,6 @@ export let declarativeNetRequest: | typeof browser.declarativeNetRequest | typeof chrome.declarativeNetRequest; -function promisify( - func: (callback: (result: T) => void) => void, -): Promise { - return new Promise((resolve, reject) => { - func((result) => { - const error = chrome.runtime.lastError; - if (error) { - reject(error); - } else { - resolve(result); - } - }); - }); -} - if (typeof browser !== "undefined") { i18n = browser.i18n; scripting = browser.scripting as ScriptingType; @@ -73,10 +58,22 @@ if (typeof browser !== "undefined") { } export const openOptionsPage: () => Promise = () => runtime.openOptionsPage(); -export const openPlayerPage: () => Promise = () => - promisify((cb: () => void) => tabs.create({ url: "/player.html" }, cb)); -export const openOnboardPage: () => Promise = () => - promisify((cb: () => void) => tabs.create({ url: "/onboard.html" }, cb)); + +async function getAdjacentTabIndex(): Promise { + const [activeTab] = await tabs.query({ + active: true, + currentWindow: true, + }); + return activeTab?.index !== undefined ? activeTab.index + 1 : undefined; +} +export const openPlayerPage: () => Promise = async () => { + const index = await getAdjacentTabIndex(); + await tabs.create({ url: "/player.html", index }); +}; +export const openOnboardPage: () => Promise = async () => { + const index = await getAdjacentTabIndex(); + await tabs.create({ url: "/onboard.html", index }); +}; export async function getOptions(): Promise { const options = await storage.sync.get();