2010-09-25 9 views
2

J'ai trouvé ce site/tutorial/demo à partir d'une autre question ici sur SO.Le script ne fonctionne pas dans localhost

Code très agréable et propre. Cependant, j'ai des problèmes avec ça quand je cours depuis localhost où je teste tous les changements sur mes sites. Je cours à peu près exactement le même code (j'ai tous les miens dans/lib non/js).

J'ai parcouru le code dans FireBug et inspecté la source générée et il ajoute les balises de script, mais un point d'arrêt sur la fonction chargée ne se déclenche jamais.

Pour tester si les fichiers sont chargés et non enregistrés, je suis le chargement jquery et dans la fonction standard $(document).ready() une alerte simple mais Firebug donne l'erreur de $ is not defined ce qui signifie que si loading.js met à jour le fichier html, le navigateur (FireFox, mais IE8 présente le même comportement) ne charge pas les fichiers.

MISE À JOUR: J'ai activé l'onglet Net. Lorsque la page est dur rechargée (via ctrl + f5) il y a 9 requêtes, dont 8 304 et un 404 (qui est l'appel à charger logo.png que je n'ai jamais copié), le reste est ColorBox css des dossiers. Aucun des objets répertoriés n'est un fichier js qui doit être chargé via le fichier loading.js en cours de chargement. Tous les temps sont en millisecondes basses et rien ne semble sortir de l'ordinaire.

MAJ2: est ici la source:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" dir="ltr"> 
<head> 
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
    <title>yensdesign.com - How to create a stylish loading bar as Gmail in jQuery</title> 
    <link rel="stylesheet" href="css/loading.css" type="text/css" media="screen" /> 
    <script src="lib/loading.js" type="text/javascript"></script> 
</head> 
<body onload="start()"> 
    <div id="restart"> 

     <a href="http://www.yensdesign.com"><img src="logo.jpg" alt="Go to yensdesign.com"/></a> 
     <div id="button" onclick="restart()"><input type="submit" value="Restart me please!" /></div> 
    </div> 
    <div id="loadingZone"> 
     <div id="loadingSms">LOADING</div> 
     <div id="infoProgress">0%</div> 
     <br class="clear" /> 
     <div id="loadingBar"> 

      <div id="progressBar">&nbsp;</div> 
     </div> 
     <div id="infoLoading"></div> 
    </div> 
</body> 
</html> 

Notez le changement de nom de general.css à loading.css. C'est loading.css qui en dehors du changement de nom est identique à general.css:

html, body, div, span, applet, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, big, cite, code, del, dfn, em, 
font, img, ins, kbd, q, s, samp, small, strike, strong, sub, sup, tt, var, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, 
tfoot, thead, tr, th, td { 
border:0pt none; 
font-family:inherit; 
font-size:100%; 
font-style:inherit; 
font-weight:inherit; 
margin:0pt; 
padding:0pt; 
vertical-align:baseline; 
} 
body{ 
background:#fff none repeat scroll 0%; 
font-size: 12px; 
font-family:tahoma,arial,sans-serif; 
margin:0pt; 
height:100%; 
} 
table { 
border-collapse:separate; 
border-spacing:0pt; 
} 
caption, th, td { 
font-weight:normal; 
text-align:left; 
} 
blockquote:before, blockquote:after, q:before, q:after { 
content:""; 
} 
blockquote, q { 
quotes:"" ""; 
} 
a{ 
cursor: pointer; 
text-decoration:none; 
} 
.clear{ 
clear:both; 
} 
#button{ 
text-align:center; 
margin:50px 50px 150px 50px; 
} 
#restart{ 
display:none; 
text-align:center; 
} 
#loadingZone{ 
margin:0 auto; 
width:410px; 
text-align:center; 
} 
#loadingBar{ 
border:1px solid #c2c2c2; 
height:2px; 
text-align:left; 
line-height:0; 
margin:0; 
padding:0; 
overflow:hidden; /*fix for IE 6*/ 
} 
#progressBar{ 
height:2px; 
line-height:0; 
margin:0; 
padding:0; 
background:#b3f83d; 
width:0%; 
} 
#loadingSms{ 
color:#6ea1fa; 
float:left; 
padding:10px 2px; 
} 
#infoProgress{ 
color:#6ea1fa; 
float:right; 
padding:10px 2px; 
} 
#infoLoading{ 
padding:10px; 
color:#b9b9b9; 
font-size:10px; 
} 

Et enfin loading.js. Notez les modifications apportées à la ligne qui ajoute la balise crée le script a été modifié pour refléter la disposition de mon répertoire.

/***************************/ 
//@Author: Adrian "yEnS" Mato Gondelle & Ivan Guardado Castro 
//@website: www.yensdesign.com 
//@email: [email protected] 
//@license: Feel free to use it, but keep this credits please!      
/***************************/ 


var LoadBar = function(){ 
    this.value = 0; 
    this.sources = Array(); 
    this.sourcesDB = Array(); 
    this.totalFiles = 0; 
    this.loadedFiles = 0; 
}; 
//Show the loading bar interface 
LoadBar.prototype.show = function() { 
    this.locate(); 
    document.getElementById("loadingZone").style.display = "block"; 
}; 
//Hide the loading bar interface 
LoadBar.prototype.hide = function() { 
    document.getElementById("loadingZone").style.display = "none"; 
}; 
//Add all scripts to the DOM 
LoadBar.prototype.run = function(){ 
    this.show(); 
    var i; 
    for (i=0; i<this.sourcesDB.length; i++){ 
     var source = this.sourcesDB[i]; 
     var head = document.getElementsByTagName("head")[0]; 
     var script = document.createElement("script"); 
     script.type = "text/javascript"; 
     script.src = source 
     head.appendChild(script); 
    }  
}; 
//Center in the screen remember it from old tutorials? ;) 
LoadBar.prototype.locate = function(){ 
    var loadingZone = document.getElementById("loadingZone"); 
    var windowWidth = document.documentElement.clientWidth; 
    var windowHeight = document.documentElement.clientHeight; 
    var popupHeight = loadingZone.clientHeight; 
    var popupWidth = loadingZone.clientWidth; 
    loadingZone.style.position = "absolute"; 
    loadingZone.style.top = parseInt(windowHeight/2-popupHeight/2) + "px"; 
    loadingZone.style.left = parseInt(windowWidth/2-popupWidth/2) + "px"; 
}; 
//Set the value position of the bar (Only 0-100 values are allowed) 
LoadBar.prototype.setValue = function(value){ 
    if(value >= 0 && value <= 100){ 
     document.getElementById("progressBar").style.width = value + "%"; 
     document.getElementById("infoProgress").innerHTML = parseInt(value) + "%"; 
    } 
}; 
//Set the bottom text value 
LoadBar.prototype.setAction = function(action){ 
    document.getElementById("infoLoading").innerHTML = action; 
}; 
//Add the specified script to the list 
LoadBar.prototype.addScript = function(source){ 
    this.totalFiles++; 
    this.sources[source] = source; 
    this.sourcesDB.push(source); 
}; 
//Called when a script is loaded. Increment the progress value and check if all files are loaded 
LoadBar.prototype.loaded = function(file) { 
    this.loadedFiles++; 
    delete this.sources[file]; 
    var pc = (this.loadedFiles * 100)/this.totalFiles; 
    this.setValue(pc); 
    this.setAction(file + " loaded"); 
    //Are all files loaded? 
    if(this.loadedFiles == this.totalFiles){ 
     setTimeout("myBar.hide()",300); 
     //load the reset button to try one more time! 
     document.getElementById("restart").style.display = "block"; 
    } 
}; 
//Global var to reference from other scripts 
var myBar = new LoadBar(); 

//Checking resize window to recenter :) 
window.onresize = function(){ 
    myBar.locate(); 
}; 
//Called on body load 
start = function() { 
    myBar.addScript("lib/jquery-min.js"); 
    myBar.addScript("lib/jquery.colorbox-min.js"); 
    myBar.addScript("lib/jquery.pan-min.js"); 
    myBar.addScript("lib/raphael-min.js"); 
    myBar.addScript("lib/map.js"); 
    myBar.run(); 
}; 
//Called on click reset button 
restart = function(){ 
    window.location.reload(); 
}; 

Des idées pour créer un script qui fonctionne parfaitement en ligne fonctionnent-elles dans localhost? Ou une méthode similaire pour faire un écran de chargement qui fonctionne dans localhost?

+1

Voulez-vous dire un site Web qui s'exécute sur localhost ou vous ouvrez des fichiers locaux? Si vous avez un problème avec Firebug, vous pouvez essayer avec Fiddler (voir http://www.fiddler2.com/fiddler2/). – Oleg

+0

C'est un site Web qui fonctionne dans localhost (via Apache 2.0.39). –

+1

Je viens de l'essayer moi-même en copiant tous les fichiers sur mon serveur web local (y compris 'jsfile [1-8] .js') * et * en ajoutant une alerte à un fichier à inclure .js et cela fonctionne correctement. –

Répondre

2

Vous avez dit que vous avez déplacé votre code vers/lib au lieu de/js. Avez-vous changé le code pour refléter cela? Son codé en dur sur la ligne 34 pour supposer que les fichiers sont là: script.src = "js/" + source. En outre, si votre onglet net firebug est désactivé, cliquez sur l'onglet et une flèche devrait apparaître à côté de lui. Cliquez sur cette flèche et sélectionnez activer.

Modifier en réponse à la mise à jour:

Je l'ai mis sur mon localhost et j'ai découvert 2 choses. D'abord, ce script semble tricher un peu. Chacun des scripts qu'il charge doit appeler la fonction "loaded" pour avertir le chargeur que le chargement a été terminé, donc vous allez devoir éditer tous les scripts que vous incluez pour appeler cette fonction si vous voulez que la barre de progression fonctionne droite. Cela mis à part, il est en train de charger tous les fichiers.Dans la ligne de commande firebug, $ renvoie une fonction qui fait partie du fichier jquery.min.js, donc il charge les fichiers.

Vous avez dit avoir mis une alerte au $(document).ready. Selon l'endroit où vous mettez cela, il est logique que vous obteniez une erreur. Si ce script est exécuté avant le chargement de jQuery par loading.js, vous obtiendrez une erreur. Je ne suis pas sûr de savoir pourquoi vous voulez ou avez besoin d'un chargeur javascript, d'autant plus que cela vous rendra plus difficile, mais si vous voulez utiliser jQuery une fois le chargement terminé, vous voudrez peut-être mettre tous les jQuery code dépendant dans un autre script et charge cela avec le chargement.js. J'ai essayé cela et ça a bien fonctionné.

+0

Oui, je l'ai fait (d'où la ligne «Je cours à peu près exactement le même code»). Je vais voir ce que FireBug dit quand l'onglet Net est activé. –

+0

Réponse mise à jour avec les résultats de l'examen de l'onglet Net (qui est de ne rien dire). –

+0

Ouais, je viens de le découvrir aussi. La raison en est que j'ai beaucoup de choses à charger pour que l'application web fonctionne (jquery, raphael, mon propre code et quelques requêtes ajax) et que je veux avoir un écran de chargement pendant ce temps et pas un écran vide ou juste un battement de spinning. –

2

Sans voir le code, je suppose que vous utilisez la page de votre système de fichiers et les chemins javascript pointent dans le répertoire racine, quelque chose comme /example.js

Vous devez bien utiliser la NET onglet de Firebug pour diagnostiquer si les fichiers ne sont pas chargés, si elle est grisée, son désactivé, vous devriez être en mesure de sur la flèche vers le bas à côté du titre "Net", et l'activer.

+0

Les fichiers js pointent vers l'emplacement correct. L'emplacement source généré est '