diff options
Diffstat (limited to 'extensions')
| -rw-r--r-- | extensions/chrome-profile-bridge/browser-extension/service_worker.js | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/extensions/chrome-profile-bridge/browser-extension/service_worker.js b/extensions/chrome-profile-bridge/browser-extension/service_worker.js index 7fbbbba..3dcb0f4 100644 --- a/extensions/chrome-profile-bridge/browser-extension/service_worker.js +++ b/extensions/chrome-profile-bridge/browser-extension/service_worker.js @@ -1981,8 +1981,15 @@ async function dispatch(action, params) { await registerInitScript(tab.id, params.initScript); } // Attach first: the debugger is how we hear about, and answer, a "Leave site?" prompt. - await attachDebugger(tab.id); - await cdp(tab.id, "Page.enable", {}).catch(() => undefined); + // Best effort: another extension's frame on the page (a password manager's inline prompt) + // makes Chrome refuse the attach, and navigating away is often how a stuck tab is freed. + // Without the debugger we cannot answer a Leave-site prompt, but the navigation still runs. + try { + await attachDebugger(tab.id); + await cdp(tab.id, "Page.enable", {}).catch(() => undefined); + } catch (error) { + console.warn(`[pi-chrome] navigating tab ${tab.id} without the debugger: ${error?.message || error}`); + } dialogPolicy.set(tab.id, { leave: params.leaveIfAsked === true }); const dialogDismissed = new Promise((resolve) => dialogWaiters.set(tab.id, resolve)); const waitsForLoad = params.waitUntilLoad !== false; |
