Newsgroup: it.comp.lang.javascript
Titolo: Eventi sul (i)frame, è possibile?

Buongiorno a tutti,
vengo subito al dunque.
Ho una pagina web, contenente un frame (o iframe se preferite). Come
valore dell'attributo "src" mettete quello che preferite (esempio:
http://www.google.it
).
Come esempio banale vorrei che, cliccando su questo frame (iframe),
venisse scatenato l'evento onclick, visualizzando un semplice
messaggio.
Insomma qualcosa del tipo:
<html>
<body>
<iframe src ="
http://www.google.it
" onclick="alert('ciao')"></iframe>
</body>
</html>
Ovviamente così non funziona. E non va nemmeno mettendo l'evento nel
tag body, o nel tag html: quando vado a cliccare all'interno del frame
(iframe) non accade nulla.
Giusto per completezza aggiungo che, naturalmente, non è un semplice
alert('ciao') che voglio, ma voglio ottenere il testo che seleziono
con il mouse all'interno del frame. Ma questo non sarebbe un problema,
ad esempio con FF mi basterebbe qualcosa del tipo
window.getSelection(). Il problema è proprio che sembra che in un
frame non è attivabile nessun evento.
Qualche idea su come affrontare il problema?

 frame non è attivabile nessun evento.
nella intranet sarei fottuto!
-- 
"Voi abili a tenere sempre un piede qua e uno là
 avrete un avvenire certo in questo mondo qua
 però la dignità
 dove l'avete persa?"
									    V.R.

 nella intranet sarei fottuto!
Quindi tu ci riesci? E mi spieghi come?
TI spiego in breve la mia esigenza:
ho una pagina composta da due frame (oppure se preferisci da del
contenuto "normale" e da un "iframe").
In un frame (o nell'iframe) carico una pagina che non posso modificare
(cioè appunto carico 
www.google.it
, ecc, ecc.).
Io vorrei la seguente cosa: quando seleziono del testo in questo frame/
iframe (e quindi in un contesto "normale" allo scatenarsi dell'evento
onmouseup), vorrei che nell'altro frame (o nella pagina "normale" in
caso di iframe) mi venisse "ricopiato" il testo selezionato.
Se non ci fossero frame, o se avessi il pieno controllo di tutte le
pagine, potrei comodamente (es, per FF) sfruttare la
window.getSelection() attivata allo scatenarsi dell'evento onmouseup,
ma invece in questo contesto non riesco a catturare l'evento
"onmouseup" che avviene nel frame/iframe.
Quindi la domanda sarebbe questa: come faccio a "catturare" l'evento
onmouseup che avviene in un frame, senza scrivere codice all'interno
di quel frame?
--
rob4you

 (cioč appunto carico 
www.google.it
, ecc, ecc.).
quindi domini diversi? scordatelo
 
http://www.mozilla.org/projects/security/components/same-origin.html
-- 
"Ti sei salvato
 o sei entrato in banca pure tu?"
									    A.V.

  
http://www.mozilla.org/projects/security/components/same-origin.html
Esatto, me ne ero accorto.
Ma allora, supponendo per un attimo che la pagina sia dello stesso
dominio (fermo restando che io non posso "aggiungere codice al suo
interno"), come potrei fare?
Ti spiego, per adesso ho fatto cosi:
- ho messo un bottone; alla pressione di questo bottone, attraverso
una funzioncina js, vado a prendermi il testo selezionato nell'iframe,
e lo visualizzo in un div apposito. Qualcosa del genere:
<html>
<body>
<iframe name="uno" src ="
http://localhost/index.php
" width="500"
height="300"></iframe>
<input type="button" id="ok" value="OK"
onclick='document.getElementById("prova").innerHTML =
seleziona_testo()' />
<div id="prova"></div>
</body>
</html>
Bene, la cosa funziona. Vorrei però evitare di premere il bottone, e
vorrei che il div fosse riempito con la selezione proprio quando
l'utente termina di selezionare un testo (appunto, se avessi la
capacità di gestire l'onmouseup all'interno del frame la cosa sarebbe
fatta, ma questa possibilità non la ho).
C'è un modo per far ciò? Grazie ancora per il contributo che mi stai
dando.
--
rob4you

 fatta, ma questa possibilità non la ho).
mah ... uno spunto: 
top.frames['uno'].document.body.onclick="alert('ok')"
-- 
"La realtà è un'illusione causata dall'assenza di alcool."
									      A.

 non mi sembra che il tag iframe supporti onclick
E infatti, da quanto sto vedendo, mi pare che non supporta proprio
nessun evento.
Puoi smentirmi per favore? Sarei lietissimo di ciň.
Che sia frame, o iframe, qualsiasi gestore di evento gli inserisco
all'interno del tag, lo ignora:
<iframe src='
http://www.google.it
' onXXXX="alert('ciao')"></iframe>
Forse non hai chiaro la differenza fra frame ed iframe?
Leo

 Forse non hai chiaro la differenza fra frame ed iframe?
Non è questo il punto. Io posso scegliere se usare un frame o un
iframe.
Da quanto sto vedendo, né un frame, né un iframe, permettono la
specifica degli eventi del tipo onXXX all'interno dei loro tag.
--
rob4you

 specifica degli eventi del tipo onXXX all'interno dei loro tag.
qualcosa supportano, ma non penso possano esserti utili:
 
http://www.w3.org/TR/html401/present/frames.html#h-16.2.1


 specifica degli eventi del tipo onXXX all'interno dei loro tag.
Non è del tutto vero. Da specifiche, usando i frame puoi impostare gli
eventi onload e onunload sul frameset. Un iframe, non avendo frameset,
si gioca questa possibilità.
Almeno, da specifiche. Mi pare di ricordare che l'onload, di fatto, si
può utilizzare anche su un iframe.
-- 
~ "L'amore è la risposta.
Ma mentre aspetti la risposta,
il sesso fa nascere alcune buone domande."
(Woody Allen)

 può utilizzare anche su un iframe.
SI effettivamente dovrebbe essere così, ma nella situazione che ho
spiegato io non me ne faccio nulla dell'onload. :)
Avrei avuto bisogno di qualcosa tipo onclick, onmouseup, ecc ecc.
Beh, almeno da questa discussione ho capito che non si può fare via js
così in modo "indolore". :)
--
rob4you

 spiegato io non me ne faccio nulla dell'onload. :)
Premesso che, difatti, non ho risposto alla tua problematica bensě
all'affermazione non propriamente vera circa il supporto di eventi
"onXXX" sui frame; nel tuo caso dell'onload te ne fai eccome.
Posto, come hai detto, che le pagine caricate nel frame si trovino
nello stesso dominio ma che non puoi toccarne i sorgenti, ti basta
usare l'onload sul frame/iframe per capire quando il document tree
č stato popolato, e poi agire su di esso.
Cosě puoi impostare tutti gli event-handler che vuoi, o modificare
radicalmente il document tree come piů ti aggrada. 
Se sei nel medesimo dominio non vai contro la SOP e azioni di quel
tipo sono del tutto legittime.
Se invece vai contro la SOP... meno male che non ti č dato fare un
qualcosa del genere. :)
Eventualmente puoi sempre passare dal server, usando il tunneling,
ma non so quanto ne valga la pena.
In pratica, tramite linguaggio server-side, carichi una pagina che
non sta sul tuo dominio. Ma essendo una pagina server a farlo, non
č soggetta alla SOP.
Poi ne prendi il contenuto, fai le tue sostituzioni, e lo spari al
client.
Volendo a questo punto potresti anche agire sul codice risultante,
dato che ora fa parte dello stesso dominio.
-- 
"Se c'č qualcosa di piů importante del mio ego su questa nave,
la voglio catturata e fucilata."

 ha scritto nel messaggio 
news:75b96887-1eac-43fe...@l32g2000hse.googlegroups.com...


 ma non so quanto ne valga la pena.
Si ci avevo pensato anche io a questa cosa, ma effettivamente diventa
parecchio più problematico per svariate ragioni.
Grazie comunque di tutti i consigli e suggerimenti.
--
rob4you

 funzionano benissimo..
Per curiosità son andato a vedere il link che mi hai segnalato, e con
mio grande stupore... i pulsanti NON si vedono affatto. :)
Né con FF né con IE.
Ho provato allora a vedere l'html della pagina, e ho trovato il link:
http://www.ilmiopaese.net/ft/Localit%E0/album/Malmantile/../res/Pulsanti
dove/Località/Malmantile/Pulsanti.htm
Qui i pulsanti si vedono. Dai un'occhiata anche tu per renderti meglio
conto.
--
rob4you

 Grazie comunque di tutti i consigli e suggerimenti.
De nada.
-- 
~ "Finestre, finestre, finestre! Sennò prevalgono i muri."
(Marco Paolini)

 document.domain = "
company.com
";
Una curiosita` che mi e` venuta leggendo qui: ma se io impostassi
document.domain = "com"
cosa succederebbe?
E nel caso (come penso) sia protetto contro queste cose, come funziona per 
quegli stati che hanno il top-level "doppio" come .
co.uk
, 
co.jp
, ecc.?
Bye.

 dove/Località/Malmantile/Pulsanti.htm

Certo quella è la pagina sulla quale punta l'iframe.
Con IE 7 si vedono benissimo e funzionano anche dalla pagine che contiene 
l'iframe, probabilmente hai settato quolcosa sul browser che impedisce di 
vederli.
Non posso mandarti l'immagine dello schermo qui sul NG, ma se mi dai 
un'indirizzo te la invio
Saluti
Leo

 Bye.
Bye.
-- 
~ "La malinconia è la felicità di esser tristi." (Victor Hugo)