Página 1 de 1

iFrame inolvidable...

Publicado: 08 Jun 2011, 12:48
por lurbe
Hola a todos. Tengo un problema que no consigo resolver y me gustaría saber si alguien tiene una idea de lo que pasa.
He realizado un programa para mi empresa que mecaniza la parte cliente repetitiva de una Web de la propia empresa y
que está dentro de su dominio (no es pública).

El desarrollo lo he hecho en Autoit y las pruebas contra la Web via red privada virtual (RPV) usando el mismo navegador
y sistema operativo de la plataforma, IE 6.0.2900 con SP3 en Windows XP Pro.

La sorpresa ha venido al llevarlo a los PCS de la empresa. Parte del código no funciona en ningún PC de la plataforma,
pero en el que lo desarrollé funciona perfectamente.

El error lo da al obtener el documento del contenido de un iFrame de la ventana, al final del código de ejemplo que pongo.


Código de ejemplo:

; Obtengo referencia a la ventana principal que ya está abierta
$oIE = _IEAttach ("www.nombre.com:81", "URL", 1)
If IsObj($oIE) = 0 Then
Return "Ventana principal no abierta"
EndIf

; Obtengo el documento
$oDoc = $oIE.document
If IsObj($oDoc) = 0 Then
Return "Error al obtener el documento de la ventana principal"
EndIf

; Obtengo el iFrame con id=detalle
$oFrameDetalle = $oDoc.getElementById('detalle')
If IsObj($oFrameDetalle) = 0 Then
Return "ERROR El iFrame detalle no se ha cargado"
EndIf

; Se navega a la ventana adecuada
$oFrameDetalle.src = "/jsp/BaseFlt.jsp?idAccion=31"
; Esperamos a que se cargue un máximo de 20 segundos
for $i = 1 to 40
If _IEPropertyGet ($oIE, "busy") Then
Sleep(500)
Else
ExitLoop
EndIf
Next

; Compruebo que $oFrameDetalle.contentWindow es un objeto
If IsObj($oFrameDetalle.contentWindow) = 0 Then
Return "ERROR El contentWindow del iFrame detalle no se ha cargado"
EndIf

; Aquí es donde me da el error que no puedo interceptar y se cierra el programa al acceder a 'document'
$oDocDetalle = $oFrameDetalle.contentWindow.document


Por si acaso tubiera algo que ver, he comparado las directivas de seguridad del sistema operativo en cada PC pero son iguales.
Como en la red local se accede con usuario con perfil de Usuarios he puesto el mismo perfil en el PC de desarrollo de la RPV y
sigue funcionando bien, por lo que no creo que sea un tema de permisos. Ayuda por favor, ya no se que más puede ser.

Un saludo a todos y gracias.

Re: iFrame inolvidable...

Publicado: 09 Jun 2011, 00:38
por Chefito
Exactamente que quieres hacer con el frame? Que quieres obtener?
Dinoslo y nos quedará más claro. Casi siempre hay varias formas de obtener lo que quieres.

Saludos.

Re: iFrame inolvidable...

Publicado: 09 Jun 2011, 11:46
por lurbe
Lo que quiero es obtener el HTML que contiene el iFrame. En algunos casos obtengo por ejemplo el listado de datos que busco. En otros casos obtengo referencia a otros controles o iFrames anidados con más datos, depende de la página en la que esté tengo una tarea que hacer u otra.

Hasta ahora cuando se trataba de hacer un GET o un POST llamava directamente y listo. Pero ahora necesito obtener datos de iFrames anidades 2 ó 3 niveles. Y ahí ya no puedo llegar.

He probado a sustituir en mi PC los archivos que hay en los equipos de la empresa, jscript.dll y jsproxy.dll del System32 por si acaso no eran igual. Y también el directorio 'Archivos de programa\Internet Explorer' entero por si se hubiera modificado algo, ya que la seguridad en la empresa es muy fuerte. Pero sigo igual, a mí me sigue funcionando y allí no va.

No se si hay alguna clave de registro capaz de hacer variar el DOM de javascript. ¿?


Saludos.

Re: iFrame inolvidable...

Publicado: 09 Jun 2011, 23:07
por Chefito
Pues si no te funciona así, no se como podrías hacerlo directamente.

Puedes hacerlo indirectamente leyendo directamente de las páginas cargadas en los iframe. Sabes las urls de las páginas gracias a su propiedad src. Mira este reciente post:
http://www.emesn.com/autoitforum/viewto ... ame#p10792

Saludos.

Re: iFrame inolvidable...

Publicado: 10 Jun 2011, 14:18
por lurbe
Gracias chefito. Tendré que buscar la forma más dificil de hacer las cosas.
Si averiguo porqué da el error lo pondré por si a alguien le interesa.

Saludos.