handle connecting ws
This commit is contained in:
@@ -93,6 +93,30 @@ await browser.close()
|
|||||||
server.close()
|
server.close()
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### Environment Variables
|
||||||
|
|
||||||
|
#### `PLAYWRITER_AUTO_ENABLE`
|
||||||
|
|
||||||
|
When set, the MCP will automatically create an initial tab when a Playwright client connects and no tabs are currently enabled. This is useful for fully automated workflows where you don't want to manually click the extension icon.
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"mcpServers": {
|
||||||
|
"playwriter": {
|
||||||
|
"command": "npx",
|
||||||
|
"args": ["playwriter@latest"],
|
||||||
|
"env": {
|
||||||
|
"PLAYWRITER_AUTO_ENABLE": "1"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
With this setting, when your AI agent starts, it will immediately have a page to work with without requiring manual extension activation.
|
||||||
|
|
||||||
|
**Note:** The auto-created tab starts at `about:blank`. Your agent can then navigate it to any URL.
|
||||||
|
|
||||||
## Comparison
|
## Comparison
|
||||||
|
|
||||||
### vs Playwright MCP
|
### vs Playwright MCP
|
||||||
|
|||||||
@@ -560,6 +560,21 @@ function handleConnectionClose(reason: string, code: number): void {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async function ensureConnection(): Promise<void> {
|
async function ensureConnection(): Promise<void> {
|
||||||
|
// If already connecting, wait for that connection to complete instead of creating a new one
|
||||||
|
// This prevents "Extension Replaced" errors when multiple callers race to connect
|
||||||
|
if (ws?.readyState === WebSocket.CONNECTING) {
|
||||||
|
logger.debug('Connection already in progress, waiting for it to complete')
|
||||||
|
const existingWs = ws
|
||||||
|
await new Promise<void>((resolve) => {
|
||||||
|
const checkInterval = setInterval(() => {
|
||||||
|
if (existingWs.readyState !== WebSocket.CONNECTING) {
|
||||||
|
clearInterval(checkInterval)
|
||||||
|
resolve()
|
||||||
|
}
|
||||||
|
}, 100)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
if (ws?.readyState === WebSocket.OPEN) {
|
if (ws?.readyState === WebSocket.OPEN) {
|
||||||
logger.debug('Connection already exists, reusing')
|
logger.debug('Connection already exists, reusing')
|
||||||
return
|
return
|
||||||
|
|||||||
Reference in New Issue
Block a user