5b10b419a2
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
3.1 KiB
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. |
|
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" |
|
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 sincreateIsolatedWorldusando elcontextIdprincipal del frame (no expuesto por esta función). - Requiere
Page.enable(se llama internamente, idempotente). - Si el iframe tiene
sandboxattribute sinallow-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
frameIDdebe obtenerse conCdpListFrames; si se pasa un ID obsoleto (frame recargado o destruido),createIsolatedWorldretorna error.