Скрипт не работает в localhost - PullRequest
2 голосов
/ 26 сентября 2010

Я нашел этот сайт / учебник / демо из другого вопроса здесь, на SO.

Очень красивый и чистый код. Однако у меня проблемы с ним при запуске с локального хоста, где я тестирую все изменения на своих сайтах. Я выполняю почти тот же код (у меня все мои в / lib не /js).

Я прошел по коду в FireBug и проверил сгенерированный источник, и он добавляет теги сценария, но точка останова в загруженной функции никогда не срабатывает.

Чтобы проверить, загружаются ли файлы и не зарегистрированы, я загружаю jquery, и в стандартной функции $(document).ready() есть простое предупреждение, но FireBug выдает ошибку $ is not defined, что означает, что при загрузке .js обновляет html файл, браузер (FireFox, но IE8 демонстрирует то же поведение) не загружает файлы.

ОБНОВЛЕНИЕ: Я включил вкладку Сеть. Когда страница перегружена (через ctrl + f5 ), есть 9 запросов, 8 из которых 304 и 404 (это вызов load logo.png, который я никогда не скопированы), остальные файлы ColorBox CSS. Ни один из перечисленных объектов не является js-файлами, которые следует загружать через загружаемый файл loading.js. Все время в низких миллисекундах, и ничто не кажется необычным.

ОБНОВЛЕНИЕ2: Вот источник:

<!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>

Обратите внимание на изменение имени с general.css на loading.css. Это loading.css, который, кроме смены имени, идентичен 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;
}

И, наконец, загрузка .js. Обратите внимание, что изменения в строке, которая добавляет тэг скрипта create, были изменены, чтобы отразить мой макет каталога.

/***************************/
//@Author: Adrian "yEnS" Mato Gondelle & Ivan Guardado Castro
//@website: www.yensdesign.com
//@email: yensamg@gmail.com
//@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();
}; 

Есть какие-нибудь идеи о том, как сделать так, чтобы скрипт, работающий онлайн, работал в localhost? Или подобным способом сделать загрузочный экран, который работает в localhost?

Ответы [ 3 ]

2 голосов
/ 26 сентября 2010

Вы сказали, что переместили свой код в / lib вместо / js. Вы изменили код, чтобы отразить это? Он жестко запрограммирован в строке 34, предполагая, что файлы есть: script.src = "js/" + source. Кроме того, если ваша вкладка firebug net отключена, щелкните вкладку, и рядом с ней должна появиться стрелка. Нажмите на эту стрелку и выберите включить.

Изменить в ответ на обновление:

Я установил его на своем локальном хосте и обнаружил 2 вещи. Во-первых, этот сценарий вроде обманывает, кажется. Каждый из загружаемых им скриптов должен вызывать «загруженную» функцию, чтобы уведомить загрузчик о том, что загрузка была завершена, поэтому вам придется редактировать все скрипты, которые вы включаете, чтобы вызывать эту функцию, если вы хотите, чтобы индикатор выполнения работал право. Кроме того, он загружает все файлы. В командной строке firebug $ возвращает функцию, которая является частью файла jquery.min.js, поэтому она загружает файлы.

Вы сказали, что поместили предупреждение в $(document).ready. В зависимости от того, где вы положили это, имеет смысл, что вы получите ошибку. Если этот скрипт запускается до того, как loading.js загрузит jQuery, вы получите ошибку. Я не совсем уверен, почему вы хотите или нуждаетесь в загрузчике javascript, тем более что это сделает это сложнее для вас, но если вы хотите использовать jQuery после завершения загрузки, вы можете поместить все jQuery зависимый код в другом скрипте и загрузите его с помощью loading.js. Я попробовал это, и все работало нормально.

2 голосов
/ 26 сентября 2010

Не видя код, я предполагаю, что вы запускаете страницу из своей файловой системы, а пути javascript указывают на корневой каталог, что-то вроде /example.js

Вы действительно должны использовать вкладку NET Firebug для диагностики, если файлы не загружаются, если они неактивны, отключены, вы должны иметь возможность на стрелке вниз рядом с заголовком «Net» и включить .

0 голосов
/ 26 сентября 2010

Хорошо, похоже, я не совсем прочитал весь учебник. Похоже, мне нужно изменить файлы, которые он будет загружать, чтобы содержать обратный вызов для сценария загрузки. Бесполезно, если я загружаю файлы из CDN или хочу предварительно загрузить images / css.

Извините за потраченное время, ребята.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...