Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей.
Здесь обсуждаются безопасность, программирование, технологии и многое другое.
Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
 |
|
ATS - движок для сайта на javascript =) |

12.06.2008, 14:09
|
|
Познавший АНТИЧАТ
Регистрация: 16.04.2006
Сообщений: 1,488
Провел на форуме: 2209675
Репутация:
537
|
|
ATS - движок для сайта на javascript =)
писал из спортивного интереса, но очень хочу найти и исправить все косяки, чтобы можно было использовать, поэтому выкладываю чтобы потестили.
онлайн-версия здесь: http://litprom.890m.com/ast/
сорцы здесь: http://up.giga.su/738058803/ (6.35 кб)
Назначение:
создание в максимально сжатые сроки статичного сайта с удобной поддержкой и расширением.
Альтернатива серверным модульным движкам, SSI, dreamweaver templates.
Суть проекта:
На страницу цепляется основной скрипт.
Появляется возможность создавать простые ссылки, которые заполняют контент страницы содержимым файлов, лежащих на сервере в текстовом формате.
Последний раз редактировалось Дикс; 12.06.2008 в 14:26..
|
|
|

12.06.2008, 15:26
|
|
Познавший АНТИЧАТ
Регистрация: 16.04.2006
Сообщений: 1,488
Провел на форуме: 2209675
Репутация:
537
|
|
я вот че думаю - можно сделать кэширование текстов - сохраняя их в переменные, а затем проверяя их наличие.
как вы считаете - стоит?
|
|
|

12.06.2008, 15:32
|
|
Познавший АНТИЧАТ
Регистрация: 02.05.2006
Сообщений: 1,191
Провел на форуме: 7364332
Репутация:
1276
|
|
Сообщение от Дикс
я вот че думаю - можно сделать кэширование текстов - сохраняя их в переменные, а затем проверяя их наличие.
как вы считаете - стоит?
Попробуй это использовать
http://forum.antichat.ru/thread72316.html
|
|
|

12.06.2008, 20:05
|
|
Постоянный
Регистрация: 30.08.2007
Сообщений: 773
Провел на форуме: 3069349
Репутация:
808
|
|
- В функции «ajax» логика получения экземпляра XMLHttpRequest воспроизводится каждый раз.
- В переменной contentDiv можно сохранить готовую ссылку на объект ( который <div id="corpse" /> ) вместо строки "corpse".
- Имеет смысл навешивать обработчики событий в js коде, а не в html.
- Чтобы свести к минимуму вероятность перезаписи переменных, можно создать объект, например, «AST» и хранить их там:
Код:
var AST =
{
folder: 'pages/',
ext: 'txt',
load: function(){ /* код */ }
};
- corpse
Сообщение от Дикс
я вот че думаю - можно сделать кэширование текстов - сохраняя их в переменные, а затем проверяя их наличие.
как вы считаете - стоит?
По-моему, нет.
|
|
|

12.06.2008, 21:22
|
|
Познавший АНТИЧАТ
Регистрация: 16.04.2006
Сообщений: 1,488
Провел на форуме: 2209675
Репутация:
537
|
|
1, 2 - сделал
3. Имеет смысл навешивать обработчики событий в js коде, а не в html.
не совсем понял.
если у меня будет меню из одних спанов, без онклика и вызова функции,
как я тогда укажу - какой пункт меню, какую страницу открывает?
4 - буду учиться работать с массивами и тоже реализую
5 - ясно. может попробую вот эти способы:
http://forum.antichat.ru/thread72316.html
а ты можешь привести доводы, почему кешировать не стоит?
ПС я знаю что corpse - 'труп'.
это мой маленький кулинарный изыск 
|
|
|

12.06.2008, 23:09
|
|
Постоянный
Регистрация: 30.08.2007
Сообщений: 773
Провел на форуме: 3069349
Репутация:
808
|
|
а ты можешь привести доводы, почему кешировать не стоит?
Потому, что браузер кэширует страницы самостоятельно, в том числе те, которые получены "Ajax'ом". Воспроизводить эту логику на JS - задача нетривиальная, если подойти к задаче серьёзно.
lazy-реализация первого пункта. Несколько объёмно:
Код:
function XHR()
{
var ms =
[
'Microsoft.XMLHTTP',
'MSXML2.XMLHTTP',
'MSXML2.XMLHTTP.3.0',
'MSXML2.XMLHTTP.4.0',
'MSXML2.XMLHTTP.5.0'
], i = ms.length, nop = function(){};
if(window.XMLHttpRequest)
{
return (XHR = function()
{
return new XMLHttpRequest();
})();
}
else if(window.ActiveXObject)
{
while(i--)
{
try
{
return (XHR = function()
{
return new ActiveXObject(ms[i]);
})();
} catch(e) {}
}
}
return (XHR = function(){
return {
open: nop,
send: function()
{
this.onreadystatechange();
},
readyState: 4,
onreadystatechange: nop,
responseText: 'XMLHttpRequest instantiation error'
};
})();
};
не совсем понял.
если у меня будет меню из одних спанов, без онклика и вызова функции,
как я тогда укажу - какой пункт меню, какую страницу открывает?
Меню обычно делается как список ссылок. Обработчик навешивается на родительский элемент. При щелчке на ссылке, если не работает js - происходит простой переход по ссылке. Если работает - js отменяет переход и подгружает данные. Техника довольно распространённая, называется event delegation.
Вот пример, не затрагивающий уже существующую разметку:
Код:
function init()
{
/* ... */
var m = document.getElementById('menu'),
s = m.getElementsByTagName('span'),
m.addEventListener('click', function(e)
{
var name = '';
switch(e.target || e.srcElement)
{
case s[0]:
name = 'home';
break;
case s[1]:
name = 'installation';
break;
case s[2]:
name = 'contacts';
break;
case s[3]:
name = 'license';
break;
default: return true;
}
loadPage(name);
(e.preventDefault || function(){ e.returnValue = false; })();
return false;
}, false);
};
Можно вместо конструкции switch использовать объект-хеш, в качестве ключей - текст пунктов меню.
P.S. для IE - attachEvent вместо addEventListener.
|
|
|

21.06.2008, 09:26
|
|
Познавший АНТИЧАТ
Регистрация: 16.04.2006
Сообщений: 1,488
Провел на форуме: 2209675
Репутация:
537
|
|
почти со всем справился, но вот этот код не отменяет перехода по ссылке ни в одном браузере:
(e.preventDefault || function(){ e.returnValue = false; })();
return false;
просто e.preventDefault () хорошо отменяет переход в ФФ и опере, а в ИЕ6 не работает.
как в ИЕ убить переход?
я повесил обработчик на теги A.
|
|
|

21.06.2008, 09:59
|
|
Постоянный
Регистрация: 30.08.2007
Сообщений: 773
Провел на форуме: 3069349
Репутация:
808
|
|
Сообщение от Дикс
почти со всем справился, но вот этот код не отменяет перехода по ссылке ни в одном браузере:
просто e.preventDefault () хорошо отменяет переход в ФФ и опере, а в ИЕ6 не работает.
как в ИЕ убить переход?
я повесил обработчик на теги A.
Это я перемудрил
Код:
if(e.preventDefault)
{
e.preventDefault();
}
else
{
e.returnValue = false;
}
return false;
|
|
|

21.06.2008, 10:30
|
|
Познавший АНТИЧАТ
Регистрация: 16.04.2006
Сообщений: 1,488
Провел на форуме: 2209675
Репутация:
537
|
|
http://up.giga.su/713746505/
вот сорцы
ИЕ на этот код ваще не реагирует
|
|
|

21.06.2008, 13:29
|
|
Постоянный
Регистрация: 30.08.2007
Сообщений: 773
Провел на форуме: 3069349
Репутация:
808
|
|
В IE события, вопреки стандарту, называются не 'click' или 'keyup', а 'onclick', 'onkeyup' и т.д.
В результате:
Код:
attachEvent('onclick', function(e){/*...*/});
Также [ Element ].attachEvent принимает только два параметра. Третий - булево значение - игнорируется.
Далее.
Функция attachEvent переписывает нативную в IE функцию window.attachEvent. Это не плохо, но нежелательно.
Код:
try {window.xmlHttp=new XMLHttpRequest();}
catch (e){ try{window.xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");}
catch (e){ try{window.xmlHttp=new ActiveXObject("MSXML2.XMLHTTP");}
catch (e){ try{window.xmlHttp=new ActiveXObject("MSXML2.XMLHTTP.3.0");}
catch (e){ try{window.xmlHttp=new ActiveXObject("MSXML2.XMLHTTP.4.0");}
catch (e){ try{window.xmlHttp=new ActiveXObject("MSXML2.XMLHTTP.5.0");}
catch (e){return false;}}}}}}
Ааааа!
Последний раз редактировалось astrologer; 21.06.2008 в 13:41..
|
|
|
|
 |
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|