Newsgroup: it.comp.lang.javascript
Titolo: Problema tosto - IFRAME, attachevent, DOM

Browser IE 5.0 o superiori.
Ho la necessita' di impredire il "paste" all'interno di un tag IFRAME reso editabile.
L'oggetto iframe purtroppo non annovera l'evento onpaste tra i suoi eventi,
ma studiando un po' ho visto che e' possibile "collegare" degli eventi non previsti con il metodo attachevent.
Per esempio, ho collegato con successo l'evento onmousedown all'IFRAME, ma l'evento onpaste non vuole saperne di essere
generato..
Se al posto di un IFRAME uso un INPUT, l'evento onpaste viene generato correttamente, e posso cancellarlo per impedire
il paste.
Il punto e' che a me serve usare l'IFRAME, e tale evento sarebbe l'unico metodo sicuro per intercettare sempre un
tentativo di paste.
L'intercettazione delle combinazioni CTRL+V, CTRL+INS sarebbe anche possibile, agendo sull'evento onkeydown (anche
questo attachabile e perfettamente funzionante), ma non basterebbe, dato che resterebbe il tasto destro del mouse con il
suo menu incolla (solo parzialmente bloccabile) e comune ci sarebbe ancora l'incolla presente nei menu del browser.
Inoltre in una prossima versione potrebbe esserci ancora un altro comando di paste, quindi l'unico modo sicuro sarebbe
quello di intercettare l'evento.
Comincio a pensare che il fatto che l'evento non venga sparato sia una bug.
Provato con IE 5.5 e IE 6
Se qualcuno riesce a risolvere la cosa, e' davvero bravo.
Grazie.
Qui sotto c'e' un esempio provabile con IE > 5.0, dove e' possibile vedere come dei due eventi collegati, uno solo venga
sparato.
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
	<title>IFRAME onpaste event</title>
 
	<SCRIPT LANGUAGE="javascript">
		function myOnPaste()
		{
			alert ("event onpaste was fired");
		}
 
    	function myOnMouseDown()
		{
			alert ("event onmousedown was fired");
		}
	</SCRIPT>
</head>
<body>
<IFRAME SRC="about:blank" NAME="RichTextFrameName" ID="RichTextFrameID" WIDTH="600" HEIGHT="280" CONTENTEDITABLE="true">
</IFRAME>
<SCRIPT LANGUAGE="javascript">
	try
	{
		var editControl_RichText = frames ['RichTextFrameID'].document;
		editControl_RichText.designMode = 'On';
 
		editControl_RichText.open ();
		editControl_RichText.write ('<P align=center><STRONG>Test</STRONG></P>');
		editControl_RichText.close ();
		editControl_RichText.attachEvent("onpaste", myOnPaste);
		editControl_RichText.attachEvent("onmousedown", myOnMouseDown);
	}
	catch (exCaughtException)
	{
		alert('error');
	}
</SCRIPT>
</body>
</html>

 ma studiando un po' ho visto che e' possibile "collegare" degli eventi non
previsti con il metodo attachevent.
L'oggetto iframe però contiene l'oggetto documentElement, ed è questo che ti
interessa.
documentElement supporta sia onpaste che onbeforepast, quindi puoi
cancellare la clipboard quando l'evento viene "sparato".
Qualcosa del genere:
function delClip(){window.clipboardData.clearData();return;}
editControl_RichText.documentElement.onpaste=delClip;
Ciao

 Ho la necessita' di impredire il "paste" all'interno di un tag IFRAME reso editabile.
Aggiungi questa riga:
editControl_RichText.documentElement.onpaste=function(){return false;}
-- 
C'ya,
ZER0
  :. job profile - coder.gfxer.webDesigner
"Quanti angeli danzano sulla punta di uno spillo?"

Vi ringrazio moltissimo, il documentElement contenute nell' IFRAME  era proprio il "gradino" che mi mancava.
Grazie ancora.