Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it L'avatar di VaLvOnAuTa
    Registrato dal
    Jun 2002
    Messaggi
    2,003

    Caricare dinamicamente script [plugins]

    Sto sviluppando un'applicazione web con molto, molto javascript.
    Però vorrei evitare di far scaricare tutto il codice se non è strettamente necessario, allora ho pensato ad una sottospecie di sistema di plugins.
    Se l'utente richiede una funzionalità non presente nel framework di base, viene caricato il relativo plugin.
    Per farlo uso questa funzione:
    codice:
    function loadJS(scriptName) {
    	var isLoaded = false
    	var scr = document.getElementsByTagName('script');
    	for (var i=0;i<scr.length;i++) {
    		if (scr[i].getAttribute('src').indexOf(scriptName) != -1) {
    			isLoaded = true;
    			break;
    		}	
    	}
    	scr = null;
    	if (!isLoaded) {
    		scr = document.createElement('script');
    		scr.setAttribute('src','./js/'+scriptName);
    		scr.setAttribute('language','javascript');
    		scr.setAttribute('type','text/javascript');
    		var head = document.getElementsByTagName('head')[0];
    		head.appendChild(scr);
    		head = null;
    		scr = null;
    	}
    }
    In pratica controllo prima che quello script non sia già caricato. Se non lo è, crea un tag script e lo accoda nella sezione "head" della pagina.
    Ora per richiamare il tutto faccio:
    codice:
    function _loadGoogle() {
    	loadJS('google.js');
    	google_window(); // funzione presente nel file google.js
    }
    Il tag script lo carica (se mostro l'output della sezione head il tag viene aggiunto) ma una volta arrivato alla funzione google_window() mi dice che la funzione non è definita. Questo perchè, suppongo, la chiamata a tale funzione avviene prima che il "plugin" sia totalmente caricato (infatti se richiamo la funzione una seconda volta, la esegue correttamente).
    C'è un modo per bloccare il flusso di istruzioni della funzione _loadGoogle() fino a quando il file google.js non sarà caricato completamente?

  2. #2
    Ciao.
    Hai già provato a mettere il file che carica ie google.js
    in un file esterno ?


    Without faith, nothing is possible. With it, nothing is impossible
    http://ilwebdifabio.it

  3. #3
    Utente di HTML.it L'avatar di VaLvOnAuTa
    Registrato dal
    Jun 2002
    Messaggi
    2,003
    Originariamente inviato da whisher
    Ciao.
    Hai già provato a mettere il file che carica ie google.js
    in un file esterno ?


    Intendi la funzione loadJS() in un file diverso da google.js?
    Ovviamente sì, se no quella funzione non sarebbe neanche richiamata.
    Comunque ho notato un comportamento diverso per ogni browser:
    - Opera è quello che funziona "meglio" nel senso che carica lo script ed esegue la funzione google_window()
    - IE 7 invece non esegue la funzione se non ha lo script in cache. Dopo la prima volta, esegue la funzione normalmente
    - FF invece è la nota dolente: alla prima chiamata della funzione _loadGoogle() mi dà errore su google_window(); se invece chiamo la stessa funzione una seconda volta me la esegue senza problemi. Ma basta un refresh per tornare alla situazione di partenza (situazione differente da IE perchè IE da problemi solo quando non ha lo script in cache).

  4. #4
    Dai un occhio a questa discussione.

    Without faith, nothing is possible. With it, nothing is impossible
    http://ilwebdifabio.it

  5. #5
    Utente di HTML.it L'avatar di VaLvOnAuTa
    Registrato dal
    Jun 2002
    Messaggi
    2,003
    Originariamente inviato da whisher
    Dai un occhio a questa discussione.

    Interessante. Grazie per la segnalazione.
    Dato che però non ho usato gli script inline ho dovuto creare un accrocchio. Personalmente mi dà l'impressione di essere una soluzione un pò "sporca" anche se funzionante (ovviamente su tutti i browser tranne che su IE )
    In pratica ho creato questa funzione
    codice:
    function $execute(fn) {
    	var scr = document.createElement('script');
    	scr.setAttribute('language','javascript');
    	scr.setAttribute('type','text/javascript');
    	scr.appendChild(document.createTextNode(fn));
    	document.getElementsByTagName('body')[0].appendChild(scr);
    	document.getElementsByTagName('body')[0].removeChild(scr);
    	scr = null;
    }
    a cui passo il nome della funzione presente nello script appena caricato.
    Ovviamente gli unici problemi vengono da IE che alla riga "scr.appendChild(document.createTextNode(fn)); " mi da questo errore:
    "Chiamata inattesa al metodo o alla proprietà di accesso".
    Qualunque cosa voglia dire

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.