From 97ac2fc984d15498ad3017bd1c7fe824ee1542d6 Mon Sep 17 00:00:00 2001 From: Copilot <198982749+Copilot@users.noreply.github.com> Date: Sun, 22 Mar 2026 14:26:36 +0000 Subject: [PATCH 1/2] web: Open new tabs beside the current one by extension * Changes: * Open new tabs beside the current tab instead of at default position (after all tabs). * Remove redundant "promisify" wrapper from "tabs.create" calls. * Test Environment: * Windows 11, Firefox 143.0. * Windows 11, Chrome 146.0.7680.80. Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: pzhlkj6612 <29089388+pzhlkj6612@users.noreply.github.com> --- web/packages/extension/src/background.ts | 7 ++++- web/packages/extension/src/utils.ts | 35 +++++++++++------------- 2 files changed, 22 insertions(+), 20 deletions(-) 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(); From 9dcc2d615488f00a6238a20cf827a19a629ee873 Mon Sep 17 00:00:00 2001 From: Mozi <29089388+pzhlkj6612@users.noreply.github.com> Date: Wed, 27 May 2026 18:49:33 +0800 Subject: [PATCH 2/2] web: No need to open the onboarding page beside the current one tab Thanks to @evilpie. --- web/packages/extension/src/utils.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/web/packages/extension/src/utils.ts b/web/packages/extension/src/utils.ts index 80c57ce193e9..203ec8f9de10 100644 --- a/web/packages/extension/src/utils.ts +++ b/web/packages/extension/src/utils.ts @@ -71,8 +71,7 @@ export const openPlayerPage: () => Promise = async () => { await tabs.create({ url: "/player.html", index }); }; export const openOnboardPage: () => Promise = async () => { - const index = await getAdjacentTabIndex(); - await tabs.create({ url: "/onboard.html", index }); + await tabs.create({ url: "/onboard.html" }); }; export async function getOptions(): Promise {