Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 06.05.2015, 12:24
Профессор
Отправить личное сообщение для kostyanet Посмотреть профиль Найти все сообщения от kostyanet
 
Регистрация: 23.10.2010
Сообщений: 2,718

Загрузка с хмтлей стилей и скриптов
Система такая - почти все стили и скрипты нормально валятся в хтмл, то есть браузер получает полный фарш в тексте. Без линков и сыырцов.

По аяксу нормально засасываются только стили. Скрипты надо запускать через создание скриптовой ноды, это вроде объяснимо.

Вопросы такие. Тот факт что стили подгребаются автоматически - это нормально, так сейчас принято, или это редкое явление и надо их тоже активировать вручную?

И второй: подскажите кошерный и модный загрузчик скриптов равно как из текста (когда они аяксом готовые валятся) так и по линкам (когда сервер отдает файл).

Смысл в том чтоб в современных браузерах все заведомо работало.

Спасибо.

Сейчас я пока нарисовал нижеследующее. Первый - из робота-яндекса, второй где-то на SO подцепил.

var load_js=function(name){
	var n = D.getElementsByTagName('script')[0],
		s = D.createElement('script'),
		f = function () { n.parentNode.insertBefore(s, n); };
	s.type = 'text/javascript';
	s.async = true;
	s.src = (location.protocol == "https:" ? "https:" : "http:") +'//'+location.hostname+'/js/'+name;
	f();

};

var create_js=function(code){

    var s = D.createElement('script');
    s.type = 'text/javascript';
    try {
      s.appendChild(D.createTextNode(code));
      D.body.appendChild(s);
    } catch (e) {
      s.text = code;
      D.body.appendChild(s);
    }

};
Ответить с цитированием
  #2 (permalink)  
Старый 06.05.2015, 12:29
Профессор
Отправить личное сообщение для kostyanet Посмотреть профиль Найти все сообщения от kostyanet
 
Регистрация: 23.10.2010
Сообщений: 2,718

Хотел бы добавить что текстом отдавать - лучше, потому что за раз все приезжает, а файл импортить - это еще раз идти за ним на сервер, а там система видите какая - чтоб никуда за текстами не ходить - получать всю кашу сразу.

Кстати, оказалась весьма опасная эта технология. Достаточного малейшего глюка в хтмле - и разваливается всё: скрипты глючат, стили плющит и в таком роде.
Ответить с цитированием
  #3 (permalink)  
Старый 06.05.2015, 14:53
Профессор
Отправить личное сообщение для kostyanet Посмотреть профиль Найти все сообщения от kostyanet
 
Регистрация: 23.10.2010
Сообщений: 2,718

Полчаса искал ответы, проверял во всех браузерах - не подхватываются стили и ниипет! Наконец заглянул в заголовки - там пишут что в ответ на запрос стилей идет мимо-тип javascript. Оказывается, я тупой. Сколько раз уже натыкался на этот сучок:

if(strcmp($type,'js'))
		header('Content-Type: text/javascript; charset='.PAGE_ENCODING);
	else
		header('Content-Type: text/css; charset='.PAGE_ENCODING);


как бы по логике if(strcmp($type,'js')) должно возвращать тру, а на самом деле надо сравнивать с 0: if(strcmp($type,'js')==0) и все заработало.

Так вот что интересно - скриптам по-барабану. С заголовком от стилей все фурыкало как кот.
Ответить с цитированием
  #4 (permalink)  
Старый 06.05.2015, 14:56
Профессор
Отправить личное сообщение для kostyanet Посмотреть профиль Найти все сообщения от kostyanet
 
Регистрация: 23.10.2010
Сообщений: 2,718

Между тем соорудил вот такое гавнище

load_ass=function(name,type){
	var el,
	head=D.getElementsByTagName('head')[0],
	url=(location.protocol=="https:"?"https:":"http:")
		+'//'+location.hostname+'/ass/'+name+'/'+type;
	if (type=='js'){
		el=D.createElement('script');
		el.setAttribute('type','text/javascript');
		el.setAttribute('src',url);
	}
	else if (type=='css'){
		el=D.createElement('link');
		el.setAttribute('rel','stylesheet');
		el.setAttribute('type','text/css');
		el.setAttribute('media','all');
		el.setAttribute('href',url);
	}
	else
		return;
		
    head.appendChild(el);
}


Вопрос, за каким роботы так пишут:

location.protocol=="https:"?"https:":"http:"

если оно равно https, то равно https и можно просто воткнуть location.protocol, или в чем там фича?
Ответить с цитированием
  #5 (permalink)  
Старый 06.05.2015, 15:04
Аватар для Vlasenko Fedor
Профессор
Отправить личное сообщение для Vlasenko Fedor Посмотреть профиль Найти все сообщения от Vlasenko Fedor
 
Регистрация: 13.03.2013
Сообщений: 1,572

// Js Loader
var loader = (function (src, callback) {
    var doc = window.document, cache = {};
    return function (src, callback) {
        if (cache.hasOwnProperty(src)) {
            callback && (callback());
        } else {
            var el = doc.createElement('script'), loaded = 0;
            el.src = src, doc.body.appendChild(el), cache[src] = 1;
            if (callback) {
                el.onload = el.onreadystatechange = function () {
                    if ((el.readyState && el.readyState !== 'complete' && el.readyState !== 'loaded') || loaded)
                        return false;
                    el.onload = el.onreadystatechange = null, loaded = 1, callback();
                };
            }
        }
    };
}());
loader('test1.js', me);
function me() {
    alert('This callback Me');
}

если надо css идем сюда http://jsfiddle.net/vlasenkofedor/5pDXf/
Ответить с цитированием
  #6 (permalink)  
Старый 06.05.2015, 15:26
Профессор
Отправить личное сообщение для kostyanet Посмотреть профиль Найти все сообщения от kostyanet
 
Регистрация: 23.10.2010
Сообщений: 2,718

Спасибо, хорошо написано. А разве скрипты без особой инструкции async способны загружаться асинхронно? Ну то есть скажем я вижу что в этой странице нет нужного скрипта, я его должен загрузить и загружаю и не проверяю ничего, а следующей строчкой буквально присваиваю переменной функцию из того самого скрипта. По идее пока тот скрипт не загрузится - на следующую строчку все равно не перейдет. Или как оно?
Ответить с цитированием
  #7 (permalink)  
Старый 06.05.2015, 15:39
Аватар для Vlasenko Fedor
Профессор
Отправить личное сообщение для Vlasenko Fedor Посмотреть профиль Найти все сообщения от Vlasenko Fedor
 
Регистрация: 13.03.2013
Сообщений: 1,572

Динамически вставленные скрипты загружаются асинхронно
функция будет выполнена после загрузки скрипта, т. есть вы в функции callback можете вызывать функцию уже из подгруженного скрипта

Последний раз редактировалось Vlasenko Fedor, 06.05.2015 в 17:15.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Подгрузка стилей и скриптов Хэйка Общие вопросы Javascript 4 11.06.2014 05:21
Динамическое подключение стилей и скриптов Marv Events/DOM/Window 5 17.10.2013 13:58
Динамическая загрузка скриптов demoniqus Общие вопросы Javascript 12 18.04.2013 19:50
динамическая загрузка скриптов dolas Events/DOM/Window 6 08.03.2013 06:07
Паралельная загрузка чужих скриптов? GOll Общие вопросы Javascript 2 10.07.2008 22:39