support activateTab

This commit is contained in:
Tommy D. Rossi
2025-11-16 12:18:18 +01:00
parent fffead4250
commit ad66cb6f01
5 changed files with 44 additions and 0 deletions
+20
View File
@@ -275,6 +275,26 @@ export class RelayConnection {
return {};
}
if (message.method === 'activateTab') {
const { targetId } = message.params;
debugLog('Activating tab with targetId:', targetId);
for (const [tabId, tab] of this._attachedTabs) {
if (tab.targetId === targetId) {
debugLog('Found tab to activate:', tabId);
await chrome.tabs.update(tabId, { active: true });
// const chromeTab = await chrome.tabs.get(tabId);
// if (chromeTab.windowId) {
// await chrome.windows.update(chromeTab.windowId, { focused: true });
// }
return { success: true };
}
}
debugLog('Target not found:', targetId);
throw new Error(`Target not found: ${targetId}`);
}
if (message.method === 'forwardCDPCommand') {
const { sessionId, method, params } = message.params;
+7
View File
@@ -219,6 +219,13 @@ export async function startPlayWriterCDPRelayServer({ port = 19988, logger = con
params: { method, params }
})
}
case 'Playwriter.activateTab': {
return await sendToExtension({
method: 'activateTab',
params
})
}
}
return await sendToExtension({
+7
View File
@@ -15,6 +15,13 @@ export type ExtensionCommandMessage =
params?: any
}
}
| {
id: number
method: 'activateTab'
params: {
targetId: string
}
}
export type ExtensionResponseMessage = {
id: number
+9
View File
@@ -164,12 +164,21 @@ server.tool(
throw new Error('accessibilitySnapshot is not available on this page')
}
const activateTab = async (targetPage: Page) => {
const cdp = await context.newCDPSession(targetPage)
const { targetInfo } = await cdp.send('Target.getTargetInfo')
const targetId = targetInfo.targetId
await cdp.send('Playwriter.activateTab' as any, { targetId })
await cdp.detach()
}
const vmContext = vm.createContext({
page,
context,
state,
console: customConsole,
accessibilitySnapshot,
activateTab,
})
const wrappedCode = `(async () => { ${code} })()`
+1
View File
@@ -28,6 +28,7 @@ always detach event listener you create at the end of a message using `page.remo
you have access to some functions in addition to playwright methods:
- `async accessibilitySnapshot(page)`: gets a human readable snapshot of clickable elements on the page. useful to see the overall structure of the page and what elements you can interact with
- `async activateTab(page)`: activates (brings to front and focuses) the browser tab for the given page
example: