jQuery Lib dynamisch nachladen (FireFox 3.5.7)

KICK

Mitglied
Hallo,

bei meinem FireFox 3.5.7 werden Scripts nur dann dynamisch nachgeladen, wenn nach der "DOM injection" des Script-Elements ein "alert();" ausgegeben wird. ansonsten nicht.

Hier ein konkretes Beispiel:
HTML:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
	<title>Test [FF 3.5.7 - Bug?]</title>
	<script type="text/javascript">
	function load_script(path){
   		var head = document.getElementsByTagName("head")[0]; 
   		var script = document.createElement('script'); 
   		script.type = 'text/javascript'; 
   		script.src = path; 
   		head.appendChild(script);
		
		// Note: Wenn alert ausgegeben wird dann wird
		// script/jquery auch geladen, ansonsten nicht
		// Why******!******!******!******!******!******!******!******!******
		//alert('bla');
	}
	</script>
</head>
<body>
	<script type="text/javascript">
	if(typeof jQuery != "function"){
		load_script('lib/jquery.js');
	}
	jQuery(document).ready(function(){
		alert('jQuery ready...');
	});
	</script>
</body>
</html>

Zusätzliche Infos:
  • Die jQuery Lib in obigen Beispiel wird bei mir (FireFox 3.5.7) nur geladen wenn das "alert" im ersten Script Bereich des Auszuges auch ausgegeben wird, ansonsten nicht.
  • Das "alert" muss innerhalb der Funktion "script_load" ausgefüht werden - in allen anderen fällen wird das script innerhalb der funktion "script_load" ebenso nicht geladen.
  • Beim ersten öffnen von FireFox nach Systemstart funktioniert "load_script" auch ohne dem alert output, ansonsten ist ebenso der "alert" output notwendig.
  • Wenn der alert 1x in script_load ausgegeben wurde, funktionieren zukünftige script_load aufrufe auch ohne alert output. Man könnte es in etwa wie folgt beschreiben:
Code:
var x=0; 
function script_load(..){
  ... script lade stuff...
   if(!x){x=1; alert('bla');} // Muss min 1x ausgegeben werden damit ladevorgang funkt
}
Fragen:
  • Liegt es an meinem System?
  • Ist das ein bekannter FireFox 3 Bug oder normales FF 3 verhalten?
  • Enthält der Code fehler?
  • Gibt es alternativen, sonstige Ideen?

Danke an alle mithelfenden ;)
Kick
 
Nachtrag:
HTML:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
	<title>Test [FF 3.5.7 - Bug?]</title>
</head>
<body>
	<script type="text/javascript">
	if(typeof jQuery != "function"){
		document.write('<'+'script type="text/javascript" src="jquery.js"><'+'/script>');
		// Ohne "alert" -> kein jquery
		// Mit "alert" -> jquery wird geladen
		// Note: "alert" muss NACH "document.write" ausgegeben werden...
		// alert('bla');
	}
	jQuery(document).ready(function(){
		alert('ready...');
	});
	</script>
</body>
</html>
Auch hier wird das Script (in diesem Fall eben die jQuery Lib) nur geladen, wenn nach dem "document.write" die "alert" funktion aufgerufen wird.
 
Das alert blockiert die Ausführung bis du es schließt. In der Zeit lädt der Browser der Skript. Es hat also nichts mit dem alert per se zu tun.

Javascript:
function load_script(path, ready){
    var head = document.getElementsByTagName("head")[0]; 
    var script = document.createElement('script'); 
   script.type = 'text/javascript'; 
   script.src = path; 

   script.onload = ready;

   head.appendChild(script);
}

//Irgendwo später im Code
load_script('foo.js', function() {
    //foo.js ist da
});

Der IE kennt natürlich onload bei Skript-Tags nicht: http://stackoverflow.com/questions/3248384/document-createelementscript-synchronously

Für de IE müsstest du pollen, z.B. mit window.setIntervall
 

Neue Beiträge

Zurück