Página 1 de 1

iFrame ...

Publicado: 15 Jul 2011, 23:41
por avechuche
Bueno estoy tratando de introducir un texto en un iFrame, en java el code seria asi.

Código: Seleccionar todo

var frame=docuemnt.getElementById(idframe).contentWindow.document || docuemnt.getElementById(idframe).contentDocument; los dos palitos "||" significan que puede usarse de esas dos maneras
frame.body.innerHTML='texto en html';
A lo que en AU3 lo tradusco como:

Código: Seleccionar todo

$oFrame = _IEFrameGetObjByName($oIE, "box") ; Toma el Iframe
O también
$oFrame = _IETagNameGetCollection($oIE, "IFRAME", 0) ; Toma el mismo frame en en caso que no tenga ID ni "name". 0 es la posicion que ocupa en el HTML, puede variar
Después hago:

Código: Seleccionar todo

$oFrame.contentDocument.body.innerHTML = "texto en html"
Pero AU3 me tira el siguiente error

Código: Seleccionar todo

C:\Users\avechuche\Desktop\123.au3 (11) : ==> The requested action with this object has failed.:
$oFrame.contentDocument.body.innerText = "texto en html"
$oFrame.contentDocument^ ERROR
Alguien sabe el porque??? o que estoy haciendo mal? Gracias!

Re: iFrame ...

Publicado: 16 Jul 2011, 18:49
por Chefito
contentdocument y contentwindow dan muchos problemas.

Mira a ver si te sirve $oFrame.outerText = "texto en html"

Saludos.

Re: iFrame ...

Publicado: 16 Jul 2011, 21:50
por avechuche
No no hay caso, el mismo error.

Código: Seleccionar todo

C:\123.au3 (11) : ==> The requested action with this object has failed.:
$oFrame.outertext = "texto en html"
$oFrame.outertext = "texto en html"^ ERROR

Re: iFrame ...

Publicado: 17 Jul 2011, 03:39
por Chefito
Pues chico, a mi me ha ido siempre perfectamente. Mira un ejemplo con una página web con iframes:

Código: Seleccionar todo

#include <IE.au3>
$oIE = _IECreate("http://www.desarrolloweb.com/articulos/667.php")
$oIframe = _IETagNameGetCollection ($oIE, "iframe",1)
$oIframe.outertext="ESTO ES UNA PRUEBA"
Verás que más o menos por el centro de la página aparece el texto "ESTO ES UNA PRUEBA" en el iframe que le indico.

Saludos.

Re: iFrame ...

Publicado: 17 Jul 2011, 04:45
por avechuche
Si veo que anda, pero conmigo no hay caso :(

Código: Seleccionar todo

<iframe frameborder="0" allowtransparency="true" tabindex="1" src="" title="Rich text editor, vB_Editor_001_editor, press ALT 0 for help." style="width: 100%; height: 100%;"></iframe>
Dentro de ese iFrame hay un HTML y dentro de este esta el HEAD y el BODY, donde en BODY va el texto.

Ese es el code del "iFrame" que quiero usar, lo cual lo localizo con "_IETagNameGetCollection($oIE, "iframe", 0)", la verdad que no se porque me da ese raro error ...



EDITO: Por alguna razon ahora anda ¬¬, el problema esta en que cuando le doy clic en "Publicar" (siendo un foro), me dice que el texto ingresado es demasiado corto, que supere los 10 caracteres (obvio que inserto mas de 10 caracteres). Dicho sea de paso, me bloquea el Iframe, osea pega el texto que quiero, pero si no actualizo la página no me deja ni seguir escribiendo, ni borrar ...

Re: iFrame ...

Publicado: 17 Jul 2011, 17:03
por Chefito
Mmmmm, dudo que sea en el body donde tienes que pegar el texto. El body es todo el cuerpo de la página web, donde están los controles, el código html, formularios, etc. Puede que sea un form lo que te interesaría ver. No se.
También veo que debe de haber otro control. Hay pone de título Rich text editor, vB_Editor_001_editor y eso me recuerda al control que utilizaba en vb (un .ocx) para escribir texto enriquecido. El control en cuestión era el RichTextBox. Seguramente donde se pega es ahí, y tiene que cargarse de alguna forma en la página. Y encima me dices que hay un botón para publicar el texto.
Todo lo anterior se debería investigar, hacer pruebas, etc. Sin la página web es muy dificil de hacer.
Seguro que hay alguna forma (si no varias) de hacerlo. Muros más altos han caído :smt003 .

Suerte.

Re: iFrame ...

Publicado: 18 Jul 2011, 00:21
por avechuche
Dentro del iFrame esta el BODY, si yo escribo en el RichEdit, lo que se modifica es el BODY que esta dentro del iFrame. Lo hice a proposito para saber donde se escribia, lo mire usando el debugbar.

Re: iFrame ...

Publicado: 18 Jul 2011, 00:43
por Chefito
Mmmmm, no se no se, me suena a que el servidor te devuelve el resultado (páginas de servidor activas, .asp), u otro lenguaje que trabaje así.

Como te he dicho antes, sin la página no se me ocurre mucho más. Si no la posteas, suerte con el código.

Saludos.

Re: iFrame ...

Publicado: 18 Jul 2011, 07:31
por avechuche
Te envie un privado, la página necesita usuario y contraseña ... ya te lo pase ... desp yo me encargo de armar el post con el code completo del Iframe si es que se encuentra una solucion ...

Re: iFrame ...

Publicado: 21 Jul 2011, 22:27
por avechuche
Aca les dejo la solucion que me dio Chefito para este tipo de problemas, respecto a como añadir un texto en un Iframe

Solucion 1

Código: Seleccionar todo

$Objeto = _IEGetObjById($oIE, "trackbackto") ; obtengo el objeto de la página para utilizarlo después. Se podría tomar cualquier objeto

$Texto = "Esto es un ejemplo de como dominar el control Editor vbulletin con AutoIt.\n\n A CHEFITO NO SE LE RESISTE CASI NADA ;) :D" ; texto que voy a insertar en el editor

; Inserto un campo oculto donde en el evento onclick pongo el código javascript para insertar el texto.

$Objeto.insertAdjacentHtml("beforebegin", "<input type='hidden' id='insertarTexto' onclick=""vB_Editor['vB_Editor_001'].write_editor_contents('" & $Texto & "', false);""></input>")

$oInsertarTexto = _IEGetObjById($oIE, "insertarTexto") ; obtengo el objeto del campo oculto creado

$oInsertarTexto.fireevent("onclick") ; lanzo el evento onclick del objeto creado para insertar el texto.
Solucion 2

Código: Seleccionar todo

; === Esta es otra forma de hacerlo. Aquí lo hago utilizando el evento onclick del objeto document === ;

_IEHeadInsertEventScript($oIE, "document", "onclick", "vB_Editor['vB_Editor_001'].write_editor_contents('" & $Texto & "', false);")

$oIE.document.fireevent("onclick")

; =========== ;


Como le dije a Chefito en algunos casos anda uno y en otros caso anda otro, pero encontre algo muy curioso del porque no me anda la "SOLUCION 1". Es muy raro y me pasa a mi solo.
El codigo de Chefito anda perfecto, asi sea solo o cuando lo adjunto a mi codigo, asi tan cual anda perfecto. Pone en el campo del mensaje "Esto es un ejemplo de como dominar el control Editor vbulletin con AutoIt.\n\n A CHEFITO NO SE LE RESISTE CASI NADA ;) :D", hasta ahi perfecto.

Ahora si yo lo pongo en mi codigo, anda pero aqui lo raro.
1) Para que el codigo ande tengo que dejarle el "$Texto" que puso CHEFITO, "Esto es un ejemplo de como dominar el control Editor vbulletin con AutoIt.\n\n A CHEFITO NO SE LE RESISTE CASI NADA ;) :D", con ese texto anda.
2) Si le cambio el texto, osea si la variable "$Texto" viene de otro lado, no me pone el texto ¬¬ ¬¬ ¬¬

Este es mi code ... un pedazo

Código: Seleccionar todo

$Texto = ""
For $s = 1 To _GUICtrlRichEdit_GetLineCount($Rich_Edit)
	$Texto &= _GUICtrlRichEdit_GetTextInLine($Rich_Edit, $s) & "\n"
Next

MsgBox(0, "", $Texto) ; Puse este MsgBox para ver si el problema estaba en que no me guardaba nada en $Texto, pero si, anda perfecto ...

$Objeto = _IEGetObjById($oIE, "trackbackto") ; obtengo el objeto de la página para utilizarlo después. Podía haber obtenido casi cualquier otro.

$Texto = "Esto es un ejemplo de como dominar el control Editor vbulletin con AutoIt.\n\n A CHEFITO NO SE LE RESISTE CASI NADA ;) :D" ; texto que voy a insertar en el editor

; Inserto un campo oculto donde en el evento onclick pongo el código javascript para insertar el texto.
$Objeto.insertAdjacentHtml("beforebegin", "<input type='hidden' id='insertarTexto' onclick=""vB_Editor['vB_Editor_001'].write_editor_contents('" & $Texto & "', false);""></input>")

$oInsertarTexto = _IEGetObjById($oIE, "insertarTexto") ; obtengo el objeto del campo oculto creado

$oInsertarTexto.fireevent("onclick") ; lanzo el evento onclick del objeto creado para insertar el texto.

; === Postea === ;
$oSubmit = _IEGetObjByName($oIE, $Boton_Web_Postear)
If Not @error Then
	_IEAction($oSubmit, "click") ; Cuando hace clic en publicar, me dice que debo ingresar un texto mayor de x caracteres, aparte es obvio no hay texto ^^
	_IELoadWait($oIE)
EndIf
Bueno ese code asi como esta, no anda, no me pone nada en el campo de texto ¬¬

Re: iFrame ...

Publicado: 23 Jul 2011, 09:22
por avechuche
Bueno esto no tiene explicacion alguna, segui las pruebas y nada, pense que era la logitud del texto, pero no .. la verdad, no se :(

Re: iFrame ...

Publicado: 23 Jul 2011, 09:59
por Chefito
Chico, pues lo que dices más que raro me da a mí que es un fallo tonto de programación, porque si dices que mi código te va perfectamente (y yo te aseguro que va perfectamente, por lo menos en un win7 64bits que es el SO donde lo probé, y en un Internet Explorer 8), debe ser casi seguro un fallo en tu código.
No se, mira a ver justo antes de esta línea:

Código: Seleccionar todo

$Objeto.insertAdjacentHtml("beforebegin", "<input type='hidden' id='insertarTexto' onclick=""vB_Editor['vB_Editor_001'].write_editor_contents('" & $Texto & "', false);""></input>")
que la variable $Texto tiene almacenado el texto que tu quieres, mira a ver tu asignación al objeto _IECreate ya que yo le puse la variable $oIE y a lo mejor tu tienes puesta otra (a que es esto? :smt005 ), declara $Texto en Global, cosas así.

Es que con el trozo de código que has puesto no se puede ver nada. Es practicamente mi código nada más. Quien sabe que haces por ahí en tu código :smt017 .

A la muy malas algo has podido hacer por ahí que choca con mi código, aunque lo dudo mucho.

Saludos.

Re: iFrame ...

Publicado: 24 Jul 2011, 01:15
por avechuche
Te lo voy a detallar para que veas que es algo que solo me pasa a mi, estoy maldito ¬¬

este es parte del codigo mio que utiliza el tuyo, menos la variable $Texto tuya, yo quiero mi propio texto ^^

Código: Seleccionar todo

; ===== Se guarda en la variable $Texto (DECLARADA GLOBAL) cada renglon del RichEdit agregandole "/n" para hacer los saltos de linea
$Texto = "" ; Borro $Texto, porque mas de arriba viene, pero no quiero ese.
For $s = 1 To _GUICtrlRichEdit_GetLineCount($Rich_Edit)
	$Texto &= _GUICtrlRichEdit_GetTextInLine($Rich_Edit, $s) & "\n"
Next

MsgBox(0, "", $Texto) ; Puse el MsgBox para ver si habia algun error, pero no, me devuelve perfectamente el texto.

; ===== Aca arranca todo el codigo tuyo (Chefito) menos $Texto, que $Texto viene de arriba (Se genera en el FOR anterior)

$Objeto = _IEGetObjById($oIE, "trackbackto") ; obtengo el objeto de la página para utilizarlo después. Podía haber obtenido casi cualquier otro.
$Objeto.insertAdjacentHtml("beforebegin", "<input type='hidden' id='insertarTexto' onclick=""vB_Editor['vB_Editor_001'].write_editor_contents('" & $Texto & "', false);"">")
$oInsertarTexto = _IEGetObjById($oIE, "insertarTexto") ; obtengo el objeto del campo oculto creado
$oInsertarTexto.fireevent("onclick") ; lanzo el evento onclick del objeto creado para insertar el texto.

; Termina el codigo tuyo.
Hasta ahi es el codigo mio que no anda con mi variable $Texto, ahora lo siguiente, pongo mi codigo con tu $Texto y GUALA!!!

Código: Seleccionar todo

; ===== Aca arranca todo el codigo tuyo (Chefito) con tu $Texto ==== ;

$Texto = "Esto es un ejemplo de como dominar el control Editor vbulletin con AutoIt.\n\n A CHEFITO NO SE LE RESISTE CASI NADA ;) :D"
$Objeto = _IEGetObjById($oIE, "trackbackto") ; obtengo el objeto de la página para utilizarlo después. Podía haber obtenido casi cualquier otro.
$Objeto.insertAdjacentHtml("beforebegin", "<input type='hidden' id='insertarTexto' onclick=""vB_Editor['vB_Editor_001'].write_editor_contents('" & $Texto & "', false);"">")
$oInsertarTexto = _IEGetObjById($oIE, "insertarTexto") ; obtengo el objeto del campo oculto creado
$oInsertarTexto.fireevent("onclick") ; lanzo el evento onclick del objeto creado para insertar el texto.

; Termina el codigo tuyo.

Lo de la asignación de las varibales es la misma, uso $oIE, la variable $Texto esta declarada "Global"

Es más te agrego una parte de mi codigo que si anda en algunos casos ...

Código: Seleccionar todo

$oSubmit = _IEGetObjById($oIE, $iTextArea)
$oSubmit.firstChild.value = $Texto
Otra parte que anda perfecto.

Código: Seleccionar todo

$oFrame = _IEFrameGetObjByName($oIE, $iTextArea)
If Not @error Then
	$Texto = ""
	For $s = 1 To _GUICtrlRichEdit_GetLineCount($Rich_Edit)
		$Texto &= _GUICtrlRichEdit_GetTextInLine($Rich_Edit, $s) & "<br>"
	Next
	_IEBodyWriteHTML($oFrame, $Texto)
EndIf


Todo eso que te puse anteriormente esta dentro de un IF, son 4 posibilidades las que toma el IF, segun cual sea el valor de la Variable $Frame, entra a una parte del IF y hace lo que tiene que hacer.

Postearia el script, pero es muy largo y creo que es de gusto, porque anda todo perfecto, menos esa parte :(

Re: iFrame ...

Publicado: 24 Jul 2011, 02:18
por Chefito
No hace falta que adjuntes todo el código. Te voy a decir como a muchos, monta un código totalmente funcional y lo miro. Que significa esto? Pues que realices un código que funcione sin tener que hacer yo la ventana, el edit, y demás. Hazlo con el trozo de código que no te funciona. Yo no voy a hacerlo :smt018 . Ya he hecho bastante.
Piensa que poniendo un simple trozo de código tuyo adjuntado al mío no se ve nada de nada, ya que el mío funciona perfectamente. Y encima cuando la parte tuya no funciona porque le faltan cosas.
Si facilitas la tarea, obtendrás más respuestas de los compañeros, te lo aseguro, ya que podrán probarlo y decirte si le van, si no le van, que errores le dan, etc.

Como habrás podido comprobar yo casi siempre intento poner código totalmente funcionales.

Lo dicho, montalo y hablamos.

Saludos.