Аватар для Daredevi1
311 / 303 / 78
Регистрация: 09.05.2009
Сообщений: 723

Динамическая подгрузка файлов.

25.03.2011, 09:40. Показов 2584. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
При подключении скрипта, код которого будет ниже, должны подгрузиться два файлика: один с js кодом, второй со стилями. С js файлом все нормально, а вот со стилями проблема... Есть конечно обход подгрузить аяксом этот файлик и потом запхнуть содержимое в style, но хочется узнать что не так в этом случае. Вот код:
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
var countLoadedFiles = 0;
 
function loadFiles(callback) {
    var head= document.getElementsByTagName('head')[0];
    var script = document.createElement("script");
    script.type = "text/javascript";
    script.onreadystatechange = function () {
        if (this.readyState == 'complete' || this.readyState == 'loaded') callback();
    };
    script.onload = function(){
        countLoadedFiles++;
        alert(countLoadedFiles);
        if (countLoadedFiles == 2){
            callback();
        }
 
    };
    script.src = "tooltip.js";
    head.appendChild(script);
 
    var style = document.createElement("link");
    style.setAttribute("rel", "stylesheet");
    script.onreadystatechange = function () {
        if (this.readyState == 'complete' || this.readyState == 'loaded') callback();
    };
    style.onload = function(){
        countLoadedFiles++;
        alert(countLoadedFiles);
        if (countLoadedFiles == 2){
            callback();
        }
    };
    style.href = "style.css";
    head.appendChild(style);
}
 
function loaded(){
    addFindElemByXPath(["/html/body/div[2]","/html/body/div"]);
}
 
loadFiles(loaded);
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
25.03.2011, 09:40
Ответы с готовыми решениями:

Динамическая подгрузка контента
Есть фреймовая страница, например такая: <frameset rows='*, 100'> <frameset cols='200,*'> <frame name='Menu'...

Динамическая подгрузка контента Ajax
Помогите пожалуйста разобраться. Необходимо на сайте barinel.ru сделать переключение во вкладках "прессы вертикальные",...

Динамическая подгрузка и выполнение кода
Запустил первый файл "file1.js" из html. Он выполняется. Но в нём есть ссылка на второй файл и при выполнении команды: ...

5
 Аватар для Kdn
307 / 165 / 25
Регистрация: 07.02.2011
Сообщений: 319
25.03.2011, 10:02
Daredevi1, Ну вроде всё верно, попробуй style.type = 'text/css' добавить
JavaScript
1
2
3
4
5
6
var style = document.createElement('link');
            style.rel  = 'stylesheet';
            style.type = 'text/css';
            style.href = filename;
 
 head.appendChild(style);
0
 Аватар для Daredevi1
311 / 303 / 78
Регистрация: 09.05.2009
Сообщений: 723
25.03.2011, 10:07  [ТС]
не помогло...
0
 Аватар для Kdn
307 / 165 / 25
Регистрация: 07.02.2011
Сообщений: 319
25.03.2011, 16:11
Daredevi1, Попробуй этот скрипт:
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
 var Loader = {
    load: function(fileList, callback, scope, preserveOrder) {
        var scope       = scope || this,
            head        = document.getElementsByTagName("head")[0],
            fragment    = document.createDocumentFragment(),
            numFiles    = fileList.length,
            loadedFiles = 0,
            me          = this;
        
        var loadFileIndex = function(index) {
            head.appendChild(
                me.buildScriptTag(fileList[index], onFileLoaded)
            );
        };
        
 
        var onFileLoaded = function() {
            loadedFiles ++;
            
            if (numFiles == loadedFiles && typeof callback == 'function') {
                callback.call(scope);
            } else {
                if (preserveOrder === true) {
                    loadFileIndex(loadedFiles);
                }
            }
        };
        
        if (preserveOrder === true) {
            loadFileIndex.call(this, 0);
        } else {
            for(var i = 0, len = fileList.length; i < len; i++){
                 fragment.appendChild(this.buildScriptTag(fileList[i], onFileLoaded));
                }
        }            
            head.appendChild(fragment);
        
    },
    
    buildScriptTag: function(filename, callback) {
        var exten = filename.substr(filename.lastIndexOf('.')+1);
        if(exten=='js') {
            var script  = document.createElement('script');
            script.type = "text/javascript";
            script.src  = filename;
            
            if(script.readyState) {
                script.onreadystatechange = function() {
                    if (script.readyState == "loaded" || script.readyState == "complete") {
                        script.onreadystatechange = null;
                        callback();
                    }
                };
            } else {
                script.onload = callback;
            }
            return script;
        }
        if(exten=='css') {
            var style = document.createElement('link');
            style.rel  = 'stylesheet';
            style.type = 'text/css';
            style.href = filename;
            callback();
            return style;
        }
    }
}
Вызов:
JavaScript
1
Loader.load(["style.css"],function(){/*Обработчик*/})
1
 Аватар для Daredevi1
311 / 303 / 78
Регистрация: 09.05.2009
Сообщений: 723
25.03.2011, 16:15  [ТС]
Спасибо. Вечером проверю.
0
 Аватар для Kdn
307 / 165 / 25
Регистрация: 07.02.2011
Сообщений: 319
25.03.2011, 17:20
Daredevi1, Может пригодится тоже самое, только в версии Minimal :
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
var Loader = {
load:function(fileList, callback, scope, preserveOrder){
 var scope=scope||this,PO=preserveOrder,
 FL=fileList,D=document,a='appendChild',
 H=D.getElementsByTagName("head")[0],
 F=D.createDocumentFragment(),FLen=FL.length,LL = 0,cb=callback,
 lF=function(i){H[a](this.bT(FL[i],oL))},
 oL=function(){
  LL++; if (FLen==LL && typeof cb=='function') cb.call(scope) 
  else if (PO===true)lF(LL)}
  if (PO===true)lF.call(this,0)
  else for(var i = 0; i < FLen; i++) F[a](this.bT(FL[i],oL));H[a](F)},    
 bT:function(filename, cb) {
  var a = function(o, c){if(o&&c&&typeof c=='object')for(var p in c)o[p]=c[p];return o},
  e = filename.substr(filename.lastIndexOf('.')+1),r='onreadystatechange',rs='readyState',
  d = document,c='createElement';
  if(e=='js') {var s  = a(d[c]('script'),{type:"text/javascript",src:filename});
  if(s[rs]){s[r] = function(){if (s[rs] == "loaded" || s[rs] == "complete"){s[r] = null;cb()}
  }}else s.onload = cb;return s;}
  if(e=='css'){var s = a(d[c]('link'),{rel:'stylesheet',type:'text/css',href:filename});cb();return s
}}}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
25.03.2011, 17:20
Помогаю со студенческими работами здесь

Динамическая подгрузка данных из БД при выборе в select
Здравствуйте. Я в JavaScript полный ноль, пока только совсем немного понимаю, что к чему, но пишу диплом и времени с самого начала учить...

Динамическая подгрузка
Доброго времени суток! Нашёл пример на наших просторах. Хороший, нравится. Загрузил на хост, работает. На странице есть...

Динамическая подгрузка данных по запросу
Здравствуйте дорогие форумчане) Кто подскажет в чём проблема? Есть форма, с выпадающим списком, выбираю пункт из него, нажимаю кнопку...

Динамическая подгрузка данных на страницу
Доброго времени суток. Есть такой вопрос, хочу сделать подгрузку данных в комментариях к примеру на фотографии. Нашёл подходящий готовый...

Динамическая подгрузка элементов в неизвестной функции
Всем, привет. Работаю над проектом в котором динамически подгружаются файлы. Есть стрелоска вниз и надпись Русский. При нажатии на...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

Новые блоги и статьи
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru