Files
fn_registry/functions/browser/cdp_new_tab_background.md
T
egutierrez 763e06c127 feat(browser): auto-commit con 178 cambios
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-06-20 18:22:23 +02:00

3.4 KiB

name, kind, lang, domain, version, purity, signature, description, tags, uses_functions, uses_types, returns, returns_optional, error_type, imports, example, tested, tests, test_file_path, file_path, notes, documentation, params, output
name kind lang domain version purity signature description tags uses_functions uses_types returns returns_optional error_type imports example tested tests test_file_path file_path notes documentation params output
cdp_new_tab_background function go browser 1.0.0 impure func CdpNewTabBackground(host string, port int, startURL string) (CdpTab, error) Abre una pestaña nueva via CDP Target.createTarget con background:true, sin activarla ni elevar la ventana del navegador (no roba el foco del WM). Drop-in sin-foco de CdpNewTab: misma firma y mismo CdpTab de retorno, pero usando el comando CDP browser-level en lugar del endpoint HTTP /json/new (que SI roba foco).
browser
cdp
tabs
spawn
background
no-focus
cdp_list_tabs_go_browser
false error_go_core
fmt
tab, err := browser.CdpNewTabBackground("localhost", 9333, "https://example.com") if err == nil { fmt.Println("nueva tab en segundo plano id=", tab.ID) } true
TestCdpNewTabBackground_closedPort
TestCdpNewTabBackground_emptyStartURLClosedPort
functions/browser/cdp_new_tab_background_test.go functions/browser/cdp_new_tab_background.go - Usa los helpers privados del paquete: cdpGetWSURL (browser-level WS), cdpConnectWS, (*CDPConn).sendCDP y CdpListTabs. No reescribe el transporte CDP. - El cierre del WebSocket se hace con CdpDisconnect (solo suelta la sesion, deja el navegador vivo). - Resuelve el CdpTab completo via CdpListTabs buscando por targetId; si hay carrera y aun no aparece, devuelve un CdpTab minimo (id, type, url) como fallback. Alternativa a CdpNewTab cuando NO quieres que la ventana del navegador robe el foco del window manager — por ejemplo, mientras el usuario escribe en otra ventana. El endpoint HTTP /json/new no admite el parametro background, asi que CdpNewTab siempre eleva la ventana; esta funcion usa Target.createTarget con "background": true para crear la pestaña en segundo plano.
name desc
host Host CDP donde escucha el navegador (vacio = localhost).
name desc
port Puerto remote-debugging de Chrome/Chromium (ej. 9333).
name desc
startURL URL inicial de la pestaña. Vacio = about:blank.
CdpTab del target recien creado (id, webSocketDebuggerUrl, title, url, ...). Error si /json/version o el comando CDP fallan.

Ejemplo

// Abrir una pestaña en segundo plano sin robar el foco del usuario.
tab, err := browser.CdpNewTabBackground("localhost", 9333, "https://example.com")
if err != nil {
    log.Fatal(err)
}
fmt.Println("pestaña creada en background:", tab.ID, tab.URL)

Cuando usarla

Cuando abras una pestaña por CDP y NO quieras que la ventana del navegador robe el foco del WM (el usuario esta escribiendo en otra ventana). Alternativa sin-foco a CdpNewTab / endpoint HTTP /json/new, que siempre eleva la ventana.

Gotchas

  • Funcion impura: abre un WebSocket al navegador y manda un comando CDP. Falla si el puerto no responde o el comando no devuelve targetId.
  • El parametro background de Target.createTarget no aplica en MacOS (alli la pestaña se activa igual). Esto esta pensado para Linux/Chromium.
  • Requiere conexion browser-level (/json/version), no page-level: por eso usa cdpGetWSURL y no la primera tab page.
  • Si el navegador corre headless, el foco es irrelevante — CdpNewTab y esta funcion son equivalentes en ese caso.