Visualizzazione dei risultati da 1 a 8 su 8

Discussione: Controllo iframe

  1. #1

    Controllo iframe

    Salve a tutti,
    Avrei una domanda da fare (ma va?):

    Ho una pagina web che si deve comportare in due modi differenti a seconda se venga visualizzata normalmente o attraverso un determinato iframe, quindi:

    Come si può controllare che una pagina sia o non sia contenuta in un iframe? O meglio: come posso fare affinché la pagina che contiene lo script sappia se è visualizzata all'interno di un iframe (e magari capendo se è il "suo" iframe o uno estraneo) o meno?

    Grazie in anticipo per ogni tipo di aiuto che mi saprete dare!

    Ciao ciao!

  2. #2
    Moderatore di JavaScript L'avatar di br1
    Registrato dal
    Jul 1999
    Messaggi
    19,998
    Inventato al momento... non l'ho provato
    codice:
    if (top<>self) {
    	alert("Sono in un Iframe!");
    	su = top.location; 
    	if (typeof(su.href)=="unknown") {
    		alert("Sono ospite di un altro sito!");
    	}
    }
    ciao
    Il guaio per i poveri computers e' che sono gli uomini a comandarli.

    Attenzione ai titoli delle discussioni: (ri)leggete il regolamento
    Consultate la discussione in rilievo: script / discussioni utili
    Usate la funzione di Ricerca del Forum

  3. #3
    purtroppo non ha l'effetto da me desiderato. Io ho scritto questo che funziona ma parzialmente
    codice:
    //restituisce 1 se l'host di parent è uguale all'host della pagna. Restituisce zero se non c'è parent o se il parent non coincide
    function controlloParent(){
    	
    	//Variabile da restituire
    	var returner = 1;
    	//Variabile contenente l'url del sito attuale
    	var thisPlace = document.URL;
    	//Variabile contenente l'ulr della parent
    	var parentPlace = parent.document.URL;
    	
    	//x equivale a 7 per saltare "http://"
    	for(var x = 7; x < parentPlace.length && x < thisPlace.length && parentPlace[x] != "/" && thisPlace[x] != "/"; x++){
    		if(parentPlace[x] != thisPlace[x]) returner = 0;
    	}
    	
    	//Se non c'è il parent restituisci comunque zero
    	if(parentPlace == thisPlace) returner = 0;
    	
    	return returner;
    }
    Il fatto è che non funziona sempre. Ho provato a fare diverse prove. Lo script deve restituire:
    1 - Se i domini sono gli stessi (ma non è la stessa pagina!)
    0 - Se la pagina che richiama lo script è inserita in un frame di un dominio differente dal proprio o se il parent conicide con la pagina stessa (nel caso in cui la pagina sia visionata orfana).

    Lo script funziona nel caso della pagina orfana e nel caso venga visionata in un iframe dello stesso dominio, ma nel caso venga visualizzata in un iframe di un dominio esterno si pianta tutto e lo script non termina l'esecuzione. Perchè?

  4. #4
    Ho creato una piccola zona di test per farvi vedere in dettaglio gli errori.
    Questo è il codice che ho scritto (è il .js completo, test inclusi):

    codice:
    /**
     * @author pamput
     */
    
    document.write("document.URL: ");
    document.write(document.URL+"
    ");
    document.write("parent.document.URL: ");
    document.write(parent.document.URL+"
    ");
    
    //restituisce 1 se l'host di parent è uguale all'host della pagna. Restituisce zero se non c'è parent o se il parent non coincide
    function controlloParent(){
    	
    	//Variabile da restituire
    	var returner = 1;
    	//Variabile contenente l'url del sito attuale
    	var thisPlace = document.URL;
    	//Variabile contenente l'ulr della parent
    	var parentPlace = parent.document.URL;
    	
    	//x equivale a 7 per saltare "http://"
    	for(var x = 7; x < parentPlace.length && x < thisPlace.length && parentPlace[x] != "/" && thisPlace[x] != "/"; x++){
    		if(parentPlace[x] != thisPlace[x]) returner = 0;
    	}
    	
    	//Se non c'è il parent restituisci comunque zero
    	if(parentPlace == thisPlace) returner = 0;
    	
    	return returner;
    }
    
    if(controlloParent() == 0)
    document.write("
    Gli indirizzi non hanno lo stesso Dominio, oppure sono coincidenti!");
    else
    document.write("
    I domini degli indirizzi sono gli stessi, e gli indirizzi non sono i medesimi");
    ecco a voi i link per i test:
    Il primo link porta a una pagina sullo stesso dominio della pagina che richiama il .js, pagina che fuzniona correttamente. Il secondo link porta ad una pagina su un altro dominio, che però non funziona correttamente, e si blocca all'inizio dell'esecuzione.

    http://www.monkeyseemonkeydo.org/.kp...th-iframe.html
    http://pamput.altervista.org/start-outside.html

  5. #5
    Moderatore di JavaScript L'avatar di br1
    Registrato dal
    Jul 1999
    Messaggi
    19,998
    Se la pagina e' in un frame di un dominio diverso tu non puoi accedere con javascript agli elementi delle loro pagine, var parentPlace = parent.document.URL; restituisce un errore.

    Prova la mia sintassi e spiega meglio come la vorresti modificata.... a me pare che faccia tutto cio' che chiedi.

    ciao
    Il guaio per i poveri computers e' che sono gli uomini a comandarli.

    Attenzione ai titoli delle discussioni: (ri)leggete il regolamento
    Consultate la discussione in rilievo: script / discussioni utili
    Usate la funzione di Ricerca del Forum

  6. #6
    guarda anche il tuo script mi da errore (l'ho dovuto modificare un pochino se no non passava nemmeno il primo "if"):
    codice:
    if (top != self) {
    	alert("Sono in un Iframe!");
    	su = top.location; 
    
            //Sezione di test
    	document.write(typeof(su.href));
    	document.write("
    Check point superato");
            //Fine test
    
    	if (typeof(su.href) == "unknown") {  //QUI DA ERRORE
    		alert("Sono ospite di un altro sito!");
    	}
    }
    Ho aggiunto due righe per test. Cmq puoi vedere ricliccando sui link che ti ho dato prima (ho sostituito solo il .js.

  7. #7
    Moderatore di JavaScript L'avatar di br1
    Registrato dal
    Jul 1999
    Messaggi
    19,998
    Mi scuso per la prima if... a furia di passare da un linguaggio all'altro mi capita talvolta di fare confusione

    Le due pagine che hai linkato sul mio IE6 funziona perfettamente... con quale browser stai provando?

    ciao
    Il guaio per i poveri computers e' che sono gli uomini a comandarli.

    Attenzione ai titoli delle discussioni: (ri)leggete il regolamento
    Consultate la discussione in rilievo: script / discussioni utili
    Usate la funzione di Ricerca del Forum

  8. #8
    firefox, comunque ora funziona, ho usato questo metodo:

    codice:
    /**
     * @author pamput
     */
    
    //Se sono in un iframe...
    function iframe(){
    	alert("Sono in un Iframe!");
    }
    
    //Non sono in un iframe
    function NO_iframe(){
    	alert("NON sono in un iframe!");
    }
    
    //Se sono in un iframe nel mio sito...
    function iframe_porprio(){
    	alert("Sono nel mio sito...");
    }
    
    //Se sono in ospite....
    function iframe_NON_proprio(){
    	alert("Sono ospite di un sito esterno!!");
    }
    
    //Codice di controllo
    if (top != self) {
    	//Se sono in un 
    	iframe();
    		
    	var su = top.location;
    	try {
    		//Se da errore è in un iframe esterno!
    		typeof(su.href);
    	} 
    	catch (error) {
    		//Se sono in ospite....
    		iframe_NON_proprio();
    		
    	}
    	finally {
    		//Se sono in un iframe nel mio sito...
    		if (typeof(su.href) == "string") {
    			iframe_porprio();
    		}
    	}
    }
    else {
    	NO_iframe();
    }
    Le rpime quattro funzioni sono solo per gestirmi facilmente i casi. Ho risolto inserendo il try/catch. Comunque ora rimetto il codice che a me non funziona e dimmi se a te va.

    EDIT: Mi correggo con IE6 funziona, con firefox non riesce a gestirsi in automatico l'errore.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.