Newsgroup: it.comp.appl.access
Titolo: oggetto DOCUMENT in browser web, sintassi

Scusate l'oggetto e sopratutto se è una domanda leggermente OT rispetto 
ad Access.
Per agevolare l'inserimento di dati in un modulo ONLINE (INPS 
assunzione), ho creato una maschera con inserito un controllo WebBrowser 
e un riferimento alla libreria Microsoft XML, v3.0 per poter utilizzare 
l'oggetto Document e i suoi attributi.
Se navigo in Google(ad esempio) posso riferirmi ad un controllo nella 
pagina caricata ed inserire  una stringa con una sintassi del genere :
....
  dato = "BNDVNI87D44L900G"
  Set xm = WB.Document
  Set fine = xm.documentElement.all
  fine.Item("q").Value = dato
....
e tutto funziona perfettamente (tranne un errore di scripting che però 
non influisce sul risultato finale, inserire una stringa complessa).
Se navigo sul sito INPS, la pagina caricata mi mostra una serie di 
controlli inseriti in un iFrame !
E qui non riesco a 'leggere' i nomi dei vari controlli e quindi non so 
come riferirmi alle varie zone di input in cui inserire i miei dati.
Io utilizzo uno stop e vado a vedermi nella finestra delle variabili 
locali la struttura del oggetto 'xm' ma mi pare di perdermi in un labirinto.
Mi sapreste indicare un testo o un sito dove imparare ad orientarmi e 
sopratutto a capire cosa è possibile e cosa no, nella strada che vorrei 
percorrere?
IvanDaBologna
-- 
-=-=-==--==-=-=-
sottOFFICEale          - il mio blog
barbera del monferrato - il mio vino
carmen                 - la mia donna
non necessariamente nel giusto ordine

 ha scritto nel messaggio 
news:49aa514d$0$1111$4faf...@reader2.news.tin.it...

Se (come spero) i tag iframe sono stati identificati dalla proprietà id:
es.
Dim oiFrameContent as Object
...
Set oiFrameContent = 
oggettoDocument.getElementById("idiFrame").contentDocument
...
 o name:
es.
Dim oiFrameContent as Object
...
Set oiFrameContent = oggettoDocument.getElementsByTagName("IFRAME")
...
Altrimenti devi far un ciclo per ogni tag iframe e cercare la stringa che ti 
indentifica la posizione dell'oggetto cercato.
Qui: 
http://www.w3schools.com/HTMLDOM/dom_obj_iframe.asp
 trovi il 
riferimento al DOM HTML e qui: 
http://www.w3schools.com/HTMLDOM/prop_iframe_contentDocument.asp
 trovi un 
esempio in JavaScript ma ti fa vedere come arrivare al contenuto...
Ciao.
-- 
Sergio MAZZA 

Sergio MAZZA ha scritto:

Grazie Sergio per la risposta.
Purtroppo non riesco ad afferrere i nomi degli elementi contenuti 
nell'iframe maledetto.
Mi sono fatto un navigatore ricursivo che analizza i vari elementi e mi 
salva le proprietà salienti in un file di testo, ma il nome o il tag 
degli elementi è poco significativo, si ripete, non evidenzia la 
funzione dell'elemento stesso.
Comunque ho capito due importanti cose, la proprietà innerHTML che mi 
permette di immettere del testo nel controllo e la possibilità di 
accedere ad un elemento tramite getElementsByTagName o getElementById 
praticamente due metodi immediati.
Credo che il problema del mio iFrame sia dovuto al codice javascript che 
lo pilota(per rilevare incongruenze nella compilazione...), ma non ne 
sono certo.
Grazie ancora e ... sto studiando il DOM!
-- 
IvanDaBologna
-=-=-==--==-=-=-
sottOFFICEale             - il mio blog
barbera del monferrato    - il mio vino
carmen                   - la mia donna
non necessariamente nello stesso ordine

 Grazie ancora e ... sto studiando il DOM!
Attenzione al fatto che i frames sono a loro volta delle *window* 
(document) se devi raggiungere un elemento il percorso e' 
document.elementoframe.document.........
--
ac

Alessandro Cara ha scritto:

infatti la cosa che più mi disorienta è proprio che accedendo alla 
proprietà DocumentElement.all dell'iFrame mi ritrovo a ripercorrere di 
nuvo tutti gli elementi precedenti e questo in una sorta di ricorsione 
modello scatole cinesi ...
Tratto l'elemento iframe come oggetto document, ma forse è che non 
capisco bene la struttura, probabilmente è una tabella con righe e 
colonne ma sinceramente mi mancano le basi e l'esperienza.
Per ora mi sono affidato al buon vecchi SendKeys che mi tradisce solo 
sul PC su cui sviluppo, negli altri è un fenomeno!
grazie ancora


 non necessariamente nello stesso ordine
(se puoi) Prova a salvare la pagina e ad inviarmela, vediamo se riesco a 
capire la struttura...
Ciao.
-- 
Sergio MAZZA 

 Ciao.
fatto! ti ringrazio per il tempo dedicato, e continuiamone a parlarne 
qui a favore del NG.


 non necessariamente nello stesso ordine
Nel codice html inviato (pagina salvata) non c'è il contenuto dell'iframe o 
meglio; il vero contenuto deve essere scaricato nell'iframe tramite la 
proprietà src (es. <iframe src="
www.inps.it/qualchecosa..
.">..) nella tua 
pagina c'è l'html che avverte di attendere il caricamento dei dati.
Comunque per leggere il contenuto dell'iframe puoi provare così:
...
Dim oIFrm As MSHTML.HTMLIFrame
...
Set oIFrm = oDoc.getElementById("ifrmGabbia2") '<-- identificativo 
dell'iframe
...
msgbox MsgBox oIFrm.Document.Title '<-- title della pagina caricata 
nell'iframe
...
di più non posso leggere, ci sono script e qualche paragrafo ma non form. E 
comunque una volta che hai il riferimento all'iframe (oIFrm) puoi fare la 
stessa cosa di prima:
...
oIFrm.Document.Forms("nomeForm").Item("nomeControllo").Value = dato
...
Ciao.
-- 
Sergio MAZZA 

 Ciao.
Ok, scusa per il ritardo ma sono spesso lontano dal PC.
Anche io mi sono disorientato al momento di leggere il contenuto 
dell'iframe, che nel momento in cui è caricato (!) non si fà esaminare ..
Comunque riprovo dal punto che mi hai suggerito e se ci saranno novità 
mi faccio rileggere qui.
Grazie mille


IvanDaBologna ha scritto:

Mi sembra strano che nell'IFRAME ci siano dati interessanti.
In genere l'IFRAME viene usato, soprattutto se si usa una struttura 
"ajax" like, come parte attiva di bridge con il server (ed e' la cosa 
che ha trovato Sergio) ed il suo contenuto puo' essere "molto" dinamico 
dato che puo' derivare da eventi di timer. Per capire bisognerebbe 
esaminare tutto il javascript che c'e' dietro la pagina.
--
ac

Alessandro Cara ha scritto:

Io posso inviarti la pagina completa(che contiene due javascripts). 
Effettivamente, esaminando il java, mi pareva di poter 'dominare' gli 
elementi che vengono pilotati( controlli di coerenza, di tipo, ecc.). Ma 
  non trovo l'esatto percorso(sintassi) per accedere ai vari elementi.
La pagina è liberamente fruibile da chiunque :
http://www.inps.it/home/default.asp?sID=;0;&iMenu=2&SERVAction=elencoTipoUtente&SERVSubAction=1&iiDServizio=95&sURL=http://servizi.inps.it/Servizi/Colf/default.htm
tanto è un modulo che chiunque può comporre.
In realtà servirebbe a chi vuole instaurare un rapporto di lavoro 
domestico(!!) Io vorrei compilare quel modulo(contenuto nell'Iframe in 
questione) sparandogli i dati da un gestionale in Access dove tutti quei 
dati vengono raccolti prima e quindi vorrei evitare la ripetizione di 
dati complessi(Codice Fiscale, Nomi stranieri, numeri di documenti.... 
che comportano sicuramente l'immissione di qualche errore!).
Per ora ho ovviato con l'invio di SendKeys ma tant'è .....


 non necessariamente nello stesso ordine
Se intendi la compilazione del: COMPILAZIONE MODULO ON LINE - Compilazione 
modello COLD: Datore di lavoro; nell'IFrame c'è una struttura a Frame e 
Table (peggio delle scatole cinesi e alla faccia 
dell'usabilità/accessibilità!).
La struttura (epurata) dovrebbe essere questa:
<html>
...
<iframe id="ifrmGabbia2">
    <frameset>
        <frame id="colf">
            <frameset>
                <frame name="modulo">
                    <form name="frmmodulo">
                    </form>
                </frame>
            </frameset>
        </frame>
    </frameset>
</iframe>
</html>
All'interno del tag form trovi (cercando bene) una tabella con la classe 
"greyDarkBorderedTable", qui ci sono i controlli da riempire.
Ottenendo il riferimento al Frame "modulo" e successivamente alla form 
"frmmodulo" puoi ignorare tutti gli altri tag.
Se vuoi navigare nella struttura per capire il "come è fatta" puoi 
utilizzare
per IE:
Internet Explorer Developer Toolbar
http://www.microsoft.com/downloadS/details.aspx?familyid=E59C3964-672D-4511-BB3E-2D5E1DB91038&displaylang=en
Per FireFox:
FireBug
https://addons.mozilla.org/it/firefox/addon/1843
Ciao.
-- 
Sergio MAZZA 

Sergio MAZZA ha scritto:

grazie per i due OTTIMI links.
Adesso provo a capire come interpretare le info che mi danno.
Un inferno dentro l'altro .... ;))
