Files
egutierrez 5b10b419a2 feat(browser): auto-commit con 44 cambios
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-06-06 12:49:54 +02:00

3.1 KiB

id, name, kind, lang, domain, purity, version, tested, description, tags, signature, uses_functions, uses_types, returns, returns_optional, error_type, imports, file_path, example, params, output
id name kind lang domain purity version tested description tags signature uses_functions uses_types returns returns_optional error_type imports file_path example params output
cdp_eval_in_frame_go_browser cdp_eval_in_frame function go browser impure 1.0.0 false Ejecuta una expresión JavaScript en el contexto aislado de un iframe concreto usando Page.createIsolatedWorld + Runtime.evaluate con el contextId del frame.
cdp
browser
iframe
javascript
eval
navegator
func CdpEvalInFrame(c *CDPConn, frameID string, expression string) (string, error)
false error_go_core
functions/browser/cdp_eval_in_frame.go conn, _ := CdpConnect("localhost", 9222, "") frames, _ := CdpListFrames(conn) // Tomar el primer iframe (índice 1, el 0 es el frame raíz) result, err := CdpEvalInFrame(conn, frames[1].ID, "document.title") fmt.Println(result) // "Título del iframe"
name desc
c Conexión CDP activa obtenida con CdpConnect.
name desc
frameID ID del frame donde ejecutar el JS; obtenido de CdpListFrames (campo CdpFrame.ID).
name desc
expression Expresión JavaScript a evaluar en el contexto del frame; puede ser una expresión simple o una Promise.
Resultado de la expresión serializado como string (fmt.Sprintf del valor CDP); error si la conexión es nula, el frameID está vacío, la comunicación CDP falla o la expresión lanza una excepción JS.

Ejemplo

conn, err := CdpConnect("localhost", 9222, "")
if err != nil {
    log.Fatal(err)
}
defer conn.Close()

frames, err := CdpListFrames(conn)
if err != nil {
    log.Fatal(err)
}

// frames[0] es el frame raíz; frames[1] sería el primer iframe
iframeID := frames[1].ID
title, err := CdpEvalInFrame(conn, iframeID, "document.title")
if err != nil {
    log.Fatal(err)
}
fmt.Println("Título del iframe:", title)

// Leer un elemento del DOM del iframe
text, _ := CdpEvalInFrame(conn, iframeID, "document.querySelector('h1').innerText")
fmt.Println("H1 del iframe:", text)

Cuando usarla

Cuando necesites leer o manipular el DOM de un iframe específico sin afectar el contexto JS de la página principal. Útil para extraer datos de iframes de terceros, formularios embebidos o widgets. Obtén el frameID con CdpListFrames antes de llamar a esta función.

Gotchas

  • El mundo aislado (fn_registry_isolated) puede leer el DOM del iframe pero NO accede a variables JS definidas en el page-world del iframe (ej. window.miVariable). Para acceder a variables JS del frame, evalúa sin createIsolatedWorld usando el contextId principal del frame (no expuesto por esta función).
  • Requiere Page.enable (se llama internamente, idempotente).
  • Si el iframe tiene sandbox attribute sin allow-scripts, el CDP puede crear el mundo aislado pero las evaluaciones fallarán con excepción de seguridad.
  • Cross-origin iframes en Chrome permiten evaluación CDP siempre que la conexión tenga acceso al target; no aplican las restricciones CORS de JS normal.
  • El frameID debe obtenerse con CdpListFrames; si se pasa un ID obsoleto (frame recargado o destruido), createIsolatedWorld retorna error.