--- id: cdp_nav_forward_go_browser name: cdp_nav_forward kind: function lang: go domain: browser purity: impure version: 1.0.0 tested: false description: "Avanza una entrada en el historial de navegación de la pestaña activa via Page.getNavigationHistory + Page.navigateToHistoryEntry. Equivalente a pulsar el botón Adelante del navegador." tags: [cdp, browser, navigation, navegator] signature: "func CdpNavForward(c *CDPConn) error" uses_functions: [] uses_types: [] returns: [] returns_optional: false error_type: error_go_core imports: [] file_path: "functions/browser/cdp_nav_forward.go" example: | conn, _ := browser.CdpConnect(9222) defer browser.CdpClose(conn, 0) _ = browser.CdpNavigate(conn, "https://example.com/paso1") _ = browser.CdpNavigate(conn, "https://example.com/paso2") _ = browser.CdpNavBack(conn) // volver a /paso1 // Avanzar de nuevo a /paso2 if err := browser.CdpNavForward(conn); err != nil { log.Println(err) } params: - name: c desc: "Conexión CDP activa obtenida de CdpConnect, apuntando a la pestaña que se quiere avanzar" output: "nil si navegó correctamente a la entrada siguiente; error si ya estamos al final del historial, la conexión es nula o el cast de tipos falla (respuesta CDP malformada)" --- ## Ejemplo ```go conn, err := browser.CdpConnect(9222) if err != nil { log.Fatal(err) } defer browser.CdpClose(conn, 0) _ = browser.CdpNavigate(conn, "https://metabase.local/dashboard/1") _ = browser.CdpNavigate(conn, "https://metabase.local/question/42") _ = browser.CdpNavBack(conn) // vuelve a /dashboard/1 // Avanzar de nuevo a /question/42 if err := browser.CdpNavForward(conn); err != nil { log.Printf("no se pudo avanzar: %v", err) } ``` ## Cuando usarla Cuando un flujo de automatización ha retrocedido con `CdpNavBack` y necesita volver a avanzar sin conocer la URL destino. Útil para recorrer un historial de páginas hacia adelante y hacia atrás de forma programática, por ejemplo en herramientas de replay de sesiones. ## Gotchas - Navega dentro del historial de ESA pestaña CDP (sesión WS), no del perfil en disco ni del historial global de Chrome. - Si `currentIndex` es el último elemento del historial (`currentIndex == len(entries) - 1`), retorna error "ya en el final del historial" — no es un fallo de red, es estado válido. - El historial se trunca cuando se navega a una URL nueva estando en una entrada intermedia: las entradas "adelante" desaparecen, igual que en un navegador real. - No espera a que la página de destino cargue; encadenar con `CdpWaitLoad` o `CdpWaitIdle` si necesitas esperar la carga completa.