Newsgroup: it.comp.lang.javascript
Titolo: contentDocument defaultView su IE

Stò cercando di far convertire una applicazione che usa gli IFRAME in XHTML
strict (che non lo prevede nella DTD). Stò usando il tag OBJECT al suo posto
ma ho un piccolo problema con IE...
In precedenza, con l'IFRAME avevo:
 myWindow = window.frames[ 'editor' ] ;
 myDocument = myWindow.document ;
e poi usavo i metodi a disposizione di myDocument: open, write e close.
In Firefox/Mozilla ottengo il funzionamento di tutto semplicemente
modificando myWindow in
document.getElementById( 'editor' ).contentDocument.defaultView
ma non riesco ad ottenere la stessa cosa in IE (uso la 6 su Xp SP2).
Qualcuno sa aiutarmi?
Grazie a tutti,
Fabio

 ma ho un piccolo problema con IE...
Onestamente non ho tempo di provare, ma in generale: hai un motivo serio 
per usare la dtd strict?
Al momento la transitional e' quella che fornisce piu' garanzie di 
compatibilita'. E potrebbe anche essere la soluzione al tuo problema.

 Qualcuno sa aiutarmi?
function getWindowFromObject(id){
	if (typeof window.frames[id]!="undefined")
		return window.frames[id];
	if (document.getElementById){
		var obj=document.getElementById(id);
		if (obj && obj.contentDocument && obj.contentDocument.defaultView)
			return obj.contentDocument.defaultView;
	}
	return null;
}
var myWindow=getWindowFromObject("yourObjectID");
-- 
ZER0
~ Legge dell'Amplificazione sonora
Nello spazio i rumori delle esplosioni si trasmettono ancora meglio perché
non c'č l'aria a trattenerli. (La Fisica nei Cartoni)

 ha scritto nel messaggio 
news:io7icpsq...@ID-171124.news.individual.net...


 contentDocument per il tag object me lo supporta solo Gecko...
Direi che non l'hai provata prima di scrivere questo tuo post... e non hai
letto attentamente ciò che ti ho scritto.
-- 
ZER0
~ Legge dell'Inesauribilità
Nessuno può rimanere senza munizioni. (La Fisica nei Cartoni)

 		return window.frames[id];
Un piccolo appunto: se ti serve solo recuperare l'oggetto window per poi,
ad esempio, cambiare location, va bene così. Se vuoi accedere al documento
(contentDocument per gecko) devi passare prima per parentWindow.
-- 
ZER0
~ Legge della Gravità Differenziata
Ogni volta che qualcosa o qualcuno salta, è lanciato, o comunque se ne va
in aria, la gravità viene ridotta di un fattore 4. (La Fisica nei Cartoni)

 (contentDocument per gecko) devi passare prima per parentWindow.
In sostanza, bastava aggiungerlo:
if (typeof window.frames[id]!="undefined")
	return window.frames[id].parentWindow;
Ma, a questo punto, se a te interessa unicamente il document, puoi anche
fare questo:
function getDocumentFromObject(id){
	if (document.getElementById){
		var obj=document.getElementById(id);
		if (obj)
			return obj.contentDocument || 
			(obj.parentWindow?obj.parentWindow.document:null)
	}
	return null;		
}
Non hai neanche bisogno della defaultView.
-- 
ZER0
~ Legge dell'Inadeguatezza Militare
Enormi flotte interstellari, interi eserciti, macchine da guerra ricolme di
crudeli guerrieri assetati di sangue, possono essere fermati e sconfitti da
un semplice gesto d'amore o una canzone. (La Fisica nei Cartoni)

getDocumentFromObject era quello che mi serviva :)
Grazie mille della pazienza,
Fabio 

Un'ultima cosa visto che ormai siamo in tema (purtroppo la parola object che 
da il nome al tag è usata in mille altri contesti e le mie ricerche su 
Google non hanno dato frutti... ):
sono riuscito a sostituire tutti gli iframe e in Firefox funziona proprio 
tutto ma in IE è rimasta un'ultima variabile che non riesco a recuperare:
var textarea = window.parent.document.getElementById( id )
Questo codice è nella pagina html contenuta nel tag object e serve per 
recuperare una textarea presente nella pagina contenitore
pagina parent
-textarea
-object
       pagina child
       -var textarea = ...
Inutile dire che in Firefox funziona perfettamente (anzi, la migrazione da 
iframe ad object è stata quasi indolore).
Grazie in anticipo,
Fabio 

 var textarea = window.parent.document.getElementById( id )
Temo che non si possa fare, in IE. Almeno così ad occhio.
Non ho mai lavorato con gli object al posto degli iframe; quindi mi dò un
margine di errore, ma ho fatto qualche test e parrebbe che di suo non vi
sia alcun collegamento tra il documento contenuto in object e la finestra
che contiene il tag object.
L'unica cosa che posso dirti, quindi, è di impostare a mano una variabile.
Qualcosa tipo:
document.getElementById("myObjectTag").parentWindow.mainWnd=window;
In questo modo nella pagina contenuta nel tag object hai una variabile
chiamata "mainWnd" che contiene il riferimento alla finestra contenitore. E
potrai fare:
mainWnd.document.getElementById( id );
Mi spiace, ma di meglio mi sà che non si può fare. Eventualmente se trovi /
hai trovato altre alternative, facci sapere.
-- 
ZER0
~ Legge dell'Amplificazione sonora
Nello spazio i rumori delle esplosioni si trasmettono ancora meglio perché
non c'è l'aria a trattenerli. (La Fisica nei Cartoni)