Visualizzazione risultati 1 fino 13 di 13

Discussione: Aggiungere allowTransparency="true", tramite javascript, ad un iframe.

  1. #1
    L'avatar di darkwolf
    darkwolf non è connesso Salvatore Noschese
    Data registrazione
    18-04-2007
    Residenza
    Reggiolo (RE)
    Messaggi
    6,558

    Predefinito Aggiungere allowTransparency="true", tramite javascript, ad un iframe.

    Salve raga!
    Ho messo il pulsante "mi piace", tramite l'iframe fornito da facebook, e lo ho "dinamicizzato" per la lingua, il referer e per gli url.
    Funziona tutto, tranne per il fatto che allowTransparency="true" fa perdere la validazione del sito.
    Ho provato convertendo l'iframe in object (e IE non lo vede - firefox e chrome ok), ho provato mettendo la trasparenza nel css (e anche qui, IE non la vede).
    Insomma, ricordo che in passato affrontai con successo questo problema ma non ricordo come.
    Pensavo di "inserire", tramite javascript, allowTransparency="true" se si usa IE e così me la risolvo perbene.
    Codice:
    <!--[if IE]>
    <script type="text/javascript">
    add -> allowTransparency="true" all'iframe :P
    </script>
    <![endif]-->
    ma, ovviamente, nonostante le ricerche fatte (probabilmente con query errate - ricordo che su questo forum fu postata una soluzione simile), non son riuscito a sistemare

  2. #2
    karl94 non è connesso Staff AV
    Data registrazione
    03-10-2005
    Messaggi
    17,745

    Predefinito

    Vuoi che lo script imposti l'attributo u tutti gli iframe o solo su uno specifico? Se sì, quale?
    Edit: puoi anche fare così: anziché usare l'iframe usi l'object, Internet Explorer non saprà come visualizzarlo, così visualizzerà il contenuto dell'object, che sarà un commento condizionale con dentro l'iframe con l'attributo già impostato.
    Ultima modifica di karl94 : 03-09-2010 alle ore 14.50.44

  3. #3
    L'avatar di darkwolf
    darkwolf non è connesso Salvatore Noschese
    Data registrazione
    18-04-2007
    Residenza
    Reggiolo (RE)
    Messaggi
    6,558

    Predefinito

    Gli posso attribuire un nome o una classe all'iframe (l'id no, nella index, ad esempio, è ripetuto più volte).
    Avevo pensato alla soluzione "dentro object" ma il validatore si incazza comunque e quindi avevo pensato al javascript :)
    Ultima modifica di darkwolf : 03-09-2010 alle ore 15.00.48

  4. #4
    L'avatar di javascripter
    javascripter non è connesso Moderatore
    Data registrazione
    14-02-2010
    Messaggi
    1,114

    Predefinito

    Ma l'id deve essere univoco, non puoi assegnare lo stesso id a più elementi.
    Ultima modifica di javascripter : 03-09-2010 alle ore 15.21.34

  5. #5
    L'avatar di darkwolf
    darkwolf non è connesso Salvatore Noschese
    Data registrazione
    18-04-2007
    Residenza
    Reggiolo (RE)
    Messaggi
    6,558

    Predefinito

    Si, lo so, infatti dicevo di lavorare su classi
    -
    Nel precedente post mi sono espresso male(?).
    Dicevo: non posso usare l'id dato che l'iframe è ripetuto più volte nella stessa pagina.
    -
    Insomma: potrei assegnare una classe all'iframe (che genera il pulsante "mi piace") e "iniettare" a tale classe l'allowtransparency="true"?

  6. #6
    L'avatar di javascripter
    javascripter non è connesso Moderatore
    Data registrazione
    14-02-2010
    Messaggi
    1,114

    Predefinito

    Scusa, ho capito male io!

    Si può fare:
    Codice:
    <!--[if IE]>
    <script type="text/javascript">
    onload = function() {
    	var frames = document.getElementsByTagName('iframe'), cn = 'nome_classe';
    
    	for(var j in frames) {
    		if(frames[j].className == cn) {
    			frames[j].allowTransparency = 'true';
    		}
    	}
    }
    </script>
    <![endif]-->
    Questo all'interno di <head>, lo script funziona se assegni una sola classe.

  7. #7
    L'avatar di darkwolf
    darkwolf non è connesso Salvatore Noschese
    Data registrazione
    18-04-2007
    Residenza
    Reggiolo (RE)
    Messaggi
    6,558

    Predefinito

    Ottimo, verificato e operativo, grazie mille (unica pecca: carica senza sfondo e lo applica appena dopo - ma vabbé)

  8. #8
    L'avatar di javascripter
    javascripter non è connesso Moderatore
    Data registrazione
    14-02-2010
    Messaggi
    1,114

    Predefinito

    Il problema è che lo script si avvia non appena la pagina è completamente carica.
    Una soluzione alternativa può essere di richiamare lo script quando DOM è pronto, dato che si tratta solo di IE puoi usare:
    Codice:
    document.onreadystatechange = function() {
    	if(this.readyState == 'complete') {
    		var frames = document.getElementsByTagName('iframe'), cn = 'nome_classe';
    
    		for(var j in frames) {
    			if(frames[j].className == cn) {
    				frames[j].allowTransparency = 'true';
    			}
    		}
    	}
    }

  9. #9
    L'avatar di darkwolf
    darkwolf non è connesso Salvatore Noschese
    Data registrazione
    18-04-2007
    Residenza
    Reggiolo (RE)
    Messaggi
    6,558

    Predefinito

    Sinceramente, tra le due soluzioni, non noto alcuna differenza (funzionano esattamente alla stessa maniera)

  10. #10
    L'avatar di javascripter
    javascripter non è connesso Moderatore
    Data registrazione
    14-02-2010
    Messaggi
    1,114

    Predefinito

    Cercando, ho trovato una funzione fatta apposta per internet explorer.
    Se vuoi provare ( il codice diventa più o meno lungo ), questa dovrebbe essere la volta buona ( ho provato anche io ).

    Codice:
    /*
     *
     * IEContentLoaded.js
     *
     * Author: Diego Perini (diego.perini at gmail.com) NWBOX S.r.l.
     * Summary: DOMContentLoaded emulation for IE browsers
     * Updated: 05/10/2007
     * License: GPL/CC
     * Version: TBD
     *
     */
    
    // @w	window reference
    // @fn	function reference
    function IEContentLoaded (w, fn) {
    	var d = w.document, done = false,
    	// only fire once
    	init = function () {
    		if (!done) {
    			done = true;
    			fn();
    		}
    	};
    	// polling for no errors
    	(function () {
    		try {
    			// throws errors until after ondocumentready
    			d.documentElement.doScroll('left');
    		} catch (e) {
    			setTimeout(arguments.callee, 50);
    			return;
    		}
    		// no errors, fire
    		init();
    	})();
    	// trying to always fire before onload
    	d.onreadystatechange = function() {
    		if (d.readyState == 'complete') {
    			d.onreadystatechange = null;
    			init();
    		}
    	};
    }
    
    IEContentLoaded(window, function() {
    	var frames = document.getElementsByTagName('iframe'), cn = 'nome_classe';
    
    	for(var j in frames) {
    		if(frames[j].className == cn) {
    			frames[j].allowTransparency = 'true';
    		}
    	}
    });

  11. #11
    L'avatar di darkwolf
    darkwolf non è connesso Salvatore Noschese
    Data registrazione
    18-04-2007
    Residenza
    Reggiolo (RE)
    Messaggi
    6,558

    Predefinito

    Ho applicato il tutto e, pur essendo leggermente più veloce (almeno credo), rimane comunque un discreto lasso di tempo in cui è bianco (prova a vedere tu stesso, se puoi). Comunque, dico davvero, non è un gran problema. Se si ostinano a tenere IE, io non posso farci nulla

  12. #12
    L'avatar di javascripter
    javascripter non è connesso Moderatore
    Data registrazione
    14-02-2010
    Messaggi
    1,114

    Predefinito

    Ho fatto vari tentativi, anche col metodo che ti ha suggerito karl94:

    Codice HTML:
    <object data="http://" style="border:none; overflow:hidden; width:450px; height:35px;">
    <!--[if IE]>
    <iframe src="http://" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:450px; height:35px;" allowTransparency="true"></iframe>
    <![endif]-->
    </object>
    E anche così per un piccolo lasso di tempo ( forse minore ) lo sfondo è bianco.
    La differenza maggiore è che è un pò ridondante ( ripetere 2 volte la stessa cosa ma prima con <object> e poi con <iframe> ).
    Ultima modifica di javascripter : 03-09-2010 alle ore 17.38.18

  13. #13
    L'avatar di darkwolf
    darkwolf non è connesso Salvatore Noschese
    Data registrazione
    18-04-2007
    Residenza
    Reggiolo (RE)
    Messaggi
    6,558

    Predefinito

    Allora lascio operativa la prima funziona (che mi sembra la più leggera)
    Ancora una volta, grazie mille :)

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •