powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / Вынос кода JS для include
25 сообщений из 25, страница 1 из 1
Вынос кода JS для include
    #35459401
Panove
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Прошу прощения за, как многим может показаться, ламерский вопрос - но проблема в следующем: JS практически ен знаю, отсюда вопрос!
Требуется сделать страничку, в которой будет редирект через указанное время с указанием ошибки и индикацией оставшегося времени до редиректа!
Нашел такой код:
Код: plaintext
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.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
<!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">
<head>

<title>Untitled Document</title>
</head>

<body>
 <TABLE cellSpacing= 0  cellPadding= 2  align=center border= 0 >

        
        <TR>
          <TD noWrap width= 200  bgColor=#e6f4fd>Внимание! <BR></TD>
          <TD noWrap width= 200  bgColor=#e6f4fd vAlign=center>
            <DIV id=waitblock style="DISPLAY: none">
            <P id=downloadhtml align=center></P></DIV>
            <DIV id=linkblock style="DISPLAY: none"><A 
            href="http://fileland.ru//keygen.Adobe_Dreamweaver_CS3_9.0.rar" 
            target=_blank>Нажмите для перехода!</A></DIV>
<script language="JavaScript" type="text/javascript">
function sprintf()
		{
			if (!arguments || arguments.length <  1  || !RegExp)
			{
				return;
			}
			var str = arguments[ 0 ];
			var re = /([^%]*)%('.|0|\x20)?(-)?(\d+)?(\.\d+)?(%|d)(.*)/;
			var a = b = [], numSubstitutions = 0, numMatches = 0;
			while (a = re.exec(str))
			{
				var leftpart = a[1], pPad = a[2], pJustify = a[3], pMinLength = a[4];
				var pPrecision = a[5], pType = a[6], rightPart = a[7];
				
				numMatches++;
				
					numSubstitutions++;
					var param = arguments[numSubstitutions];
					var pad = '';
					       if (pPad && pPad.substr(0,1) == "'") pad = leftpart.substr(1,1);
					  else if (pPad) pad = pPad;
					var justifyRight = true;
					       if (pJustify && pJustify === "-") justifyRight = false;
					var minLength = -1;
					       if (pMinLength) minLength = parseInt(pMinLength);
					var precision = -1;
					var subst = param;
					      
					subst = parseInt(param) ? parseInt(param) : 0;
				
				str = leftpart + subst + rightPart;
			}
			return str;
		}

 document.getElementById("waitblock").style.display = '';
var downcount=11;

function countdown2()
{
 downcount--;

 if( downcount == 0 )
 {
  window.location="./";
 }

 if( downcount > 0 )
 {
  document.getElementById("downloadhtml").innerHTML = sprintf("Окно закроется через <b>%d</b> сек. </font>",downcount);
  setTimeout('countdown2()', 1000 );
 }
}

countdown2();
</script>

      </TD>
          
        </TR></TABLE>

</body>
</html>
НО теперь из этого кода не могу выдернуть JS, чтобы разместить его отдельным файлом и сделать include в другие страницы - после выноса кода JS перестает работать конструкция! Кто может помочь с проблемой - буду очень благодарен!!!
...
Рейтинг: 0 / 0
Вынос кода JS для include
    #35459424
ЯпСтам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plaintext
<link rel="stylesheet" type="text/css" href="styles.css">
...
Рейтинг: 0 / 0
Вынос кода JS для include
    #35459431
ЯпСтам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Опс, немного не то :)
Код: plaintext
<script type="text/javascript" src="funcs.js"></script>
...
Рейтинг: 0 / 0
Вынос кода JS для include
    #35459439
М.Голованов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В приведенном примере элементы "waitblock" и "downloadhtml" существуют в документе ДО выполнения функции countdown2(), поскольку скрипт исполняется после их рендеринга. Вы в Ваших документах, видимо, ставите ссылку на скрипт ДО рендеринга (в head секции до body), так? Если да, то поставьте ее ПОСЛЕ рендеринга:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
<html>
<head>
<title>Untitled Document</title>
</head>
<body>
. . .
</body>
<head>
<script type=text/javascript  src="myScript.js"></script>
</head>
<html>
...
Рейтинг: 0 / 0
Вынос кода JS для include
    #35459499
Panove
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо!
Всен сделал так - в результате заработало:
Код: plaintext
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.
<!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">
<head>

<title>Untitled Document</title>
</head>

<body>
 <TABLE cellSpacing= 0  cellPadding= 2  align=center border= 0 >

        
        <TR>
          <TD noWrap width= 200  bgColor=#e6f4fd>Внимание! <BR></TD>
          <TD noWrap width= 200  bgColor=#e6f4fd vAlign=center>
            <DIV id=waitblock style="DISPLAY: none">
            <P id=downloadhtml align=center></P></DIV>
            <DIV id=linkblock style="DISPLAY: none"><A 
            href="./" 
            target=_blank>Нажмите для перехода!</A></DIV>

      </TD>
          
        </TR></TABLE>

</body>
<head>
<script type=text/javascript  src="script.js"></script>
</head>

</html>
Смущает только то, что секция
Код: plaintext
1.
2.
<head>
<script type=text/javascript  src="script.js"></script>
</head>
Находится в конце документа, а хотелось бы в начале, как положено по спецификации...
Что изменить в коде для этого?
...
Рейтинг: 0 / 0
Вынос кода JS для include
    #35459515
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Скрипт находится там где его требуется _выполнить_
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Вынос кода JS для include
    #35459525
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Только вот зачем второй head ? ;)
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Вынос кода JS для include
    #35459531
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так скорей всего
Код: plaintext
1.
2.
3.
4.
5.
        </TR></TABLE>

<script type=text/javascript  src="script.js"></script>
</body>
</html>

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Вынос кода JS для include
    #35459538
М.Голованов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PanoveНаходится в конце документа, а хотелось бы в начале, как положено по спецификации...Что изменить в коде для этого?

Можно и так:

<html>
<head>
<title>Untitled Document</title>
</head>
<body>
. . .
<script type=text/javascript src="myScript.js"></script>
</body>
<html>

body может содержать script. Главное, чтобы скрипт включался после рендеринга элементов, на которые он ссылается.
...
Рейтинг: 0 / 0
Вынос кода JS для include
    #35459612
Panove
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
М.Голованов PanoveНаходится в конце документа, а хотелось бы в начале, как положено по спецификации...Что изменить в коде для этого?

Можно и так:

<html>
<head>
<title>Untitled Document</title>
</head>
<body>
. . .
<script type=text/javascript src="myScript.js"></script>
</body>
<html>

body может содержать script. Главное, чтобы скрипт включался после рендеринга элементов, на которые он ссылается.
Спасибо огромное!
Все прекрасно работает!!!
Ну и вдогонку вопрос: так как скрипт не мой, а выдран с сайта, то возникает вопрос в необходимости функции:
Код: plaintext
1.
2.
function sprintf()
...
Чувствую, что она лишняя и для моих целей не требуется, но как вырезать её с сохранением работоспособности скрипта - ума не приложу!
...
Рейтинг: 0 / 0
Вынос кода JS для include
    #35459668
М.Голованов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PanoveЧувствую, что она лишняя и для моих целей не требуется, но как вырезать её с сохранением работоспособности скрипта - ума не приложу!

Ну, тогда удалите ее. И счетчик заодно за ненадобностью. И вообще весь скрипт. И будет совсем просто:

<html>
<head>
<title>Untitled Document</title>
</head>
<body>
. . .
<script type=text/javascript>
var timer=setInterval('window.location="./" ',10000);
</script>
</body>
<html>
...
Рейтинг: 0 / 0
Вынос кода JS для include
    #35459710
Panove
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не-а!
Счетчик все таки нужен... :-)
Вопрос в том, так уж необходима эта функция?
Если без неё счетчик будет работать - буду резать, если нет - оставлю, нет желания загромождать скрипты недействующим (точнее сказать, бездействующим) кодом!
А что до простого варианта - это можно было и на PHP сделать гораздо проще, но хотелось бы уведомлять посетителя о оставшемся времени до перенаправления!
...
Рейтинг: 0 / 0
Вынос кода JS для include
    #35459969
М.Голованов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PanoveНе-а!
Счетчик все таки нужен... :-)
Тогда так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
<html>
<head>
<title>Untitled Document</title>
</head>
<body>
. . .
<script type=text/javascript src="countdown2.js"></script>
</body>
<html>

// countdown2.js
document.getElementById("waitblock").style.display="";
var downcount= 11 ;
function countdown2(){
  downcount--;
  if(!downcount){ window.location="./";return; }
  document.getElementById("downloadhtml").innerHTML="Окно закроется через <b>"+downcount+"</b> сек.";
  setTimeout("countdown2()", 1000 );
}
countdown2();
...
Рейтинг: 0 / 0
Вынос кода JS для include
    #35460161
Фотография illion
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
так и тянет Вас скрипт в конец документа запихать. НЕ НУЖНО : размещать скрипты и head в конце. НУЖНО : делать вызов функции в положенном месте в положенное время. В данном случае - убрать вызов countdown2() из подключаемого модуля и сделать этот вызов на window.onload, например.
...
Рейтинг: 0 / 0
Вынос кода JS для include
    #35461422
apapacy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Panove
НО теперь из этого кода не могу выдернуть JS, чтобы разместить его отдельным файлом и сделать include в другие страницы - после выноса кода JS перестает работать конструкция! Кто может помочь с проблемой - буду очень благодарен!!!

Почему перестает работать JavaScript при выносе в отделный файл - в 99% случаев по следующей причине:

inline скрипты выполняются по ходу загрузки BODY документа в том месте, где они встретились.
Поэтому Вы например мождете спокойно использовать document.write() и формировать текст в ситиле сервернных языков.

Скрипты загружаемые по scr загружаются в произвольном порядке. Чтобы гарантировать что на момент вызова функции из такого скрипта пользуются следующими способами
1. Вызывают функции в window.onload или в body.onload
или 2. Задают тег SCRIPT в HEAD
или 3. Пользуются синхронными Аякс-запросами.

HEAD должен быть один и находится в голове документа. Сколько ни пиши второй head - это все равно будет body
...
Рейтинг: 0 / 0
Вынос кода JS для include
    #35461467
М.Голованов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
apapacyСкрипты загружаемые по scr загружаются в произвольном порядке
Поразительные вещи Вы пишете. Не могли бы Вы привести пример серверного лога, в котором запросы на скрипты следовали бы в порядке, отличном от того, в каком эти скрипты включены в HTML?

Я настолько озадачился, что не поленился понажимать F5 в нескольких страницах, которые содержат ссылки на несколько .CSS и .JS. Как написано, так и запрашивается. Да иначе и быть не может (к примеру, в любимой мною библиотеке Yahoo!UI порядок загрузки скриптов вследствие зависимостей наследования и использования имеет критическое значение, и если бы скрипты грузились как попало, ничего бы не работало).
...
Рейтинг: 0 / 0
Вынос кода JS для include
    #35461492
apapacy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ваш вопрос уже содержит ответ.
При чем тут серверные логи?
Вам важно когда сервер отдаст полностью ответ.
Тут все статистика.
Браузер отправляет запросы в сеть в порядке 1,2,3,4,5...
При путешествии по сети некоторые из этих запросов могут попасть в разные пакеты, перезапрашиваться, обгонят друг друга. Хотя вероятность того, что в Интранет или на localhost прийдут запросы в порядке отличном от 1,2,3,4,5... мала. Это и показал Ваш серверный log.
Но теперь пойдет обработка на сервере. Скрипты бывают разного размера. Нкоторые скрипты генерятся серверным кодом и обращаются к БД, другим хостам и т.п., так что такие скрипты могут уже с сервера уходить не в том порядке 1,5,3,4,5...
Теперь эти скрипты попадают обратно в браузер например в порядке 1,3,5,4,2...
И браузер будет выбирать их в том порядке в котором они поступают с сервера.
Но тут еще не все. На самом деле в очереди могут оказаться несколько скриптов и тут как говорят IE их выполняет в порядке случайном, а все оствальные в порядке поступления. Во всяком случае на порядкок не следует ориенироваться.
Существуют просто некоторые точки
1. HEAD и
2. onload
которые гарантируют, что скрипт уже точно загрузился.
...
Рейтинг: 0 / 0
Вынос кода JS для include
    #35461507
Panove
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Дискуссия конечно развивается интересная! Но простят меня "товарищи по перу" за тупость - я сам не в состоянии вынести код и разместить его в windows.onload! Пробовал по всякому, все безуспешно...
Может кто поможет готовой реализацией кода? Буду очень принателен!
Увы, ну не спец я в JS...
...
Рейтинг: 0 / 0
Вынос кода JS для include
    #35461508
М.Голованов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
apapacyВо всяком случае на порядкок не следует ориенироваться
No comments. Мне бы Вашу уверенность. Писатели библиотек, конечно, все лохи и ламеры. Фантазируйте дальше.
...
Рейтинг: 0 / 0
Вынос кода JS для include
    #35461509
М.Голованов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PanoveМожет кто поможет готовой реализацией кода?
Я привел выше код: http://www.sql.ru/forum/actualpost.aspx?bid=61&tid=581530&mid=6003826&p=1&act=quot. Он точно будет работать. Впрочем, дело Ваше.
...
Рейтинг: 0 / 0
Вынос кода JS для include
    #35461615
Panove
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
М.Голованов PanoveМожет кто поможет готовой реализацией кода?
Я привел выше код: http://www.sql.ru/forum/actualpost.aspx?bid=61&tid=581530&mid=6003826&p=1&act=quot. Он точно будет работать. Впрочем, дело Ваше.
Да, спасибо! Код работает! Проверено!
...
Рейтинг: 0 / 0
Вынос кода JS для include
    #35461706
Фотография illion
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
М.Голованов apapacyВо всяком случае на порядкок не следует ориенироваться
No comments. Мне бы Вашу уверенность. Писатели библиотек, конечно, все лохи и ламеры. Фантазируйте дальше.
да, профессиональной уверенности Вам бы не помешало. Или хотя бы умения читать и анализировать сказанное. А то пока что пахнет только глухой упертостью. Писатели библиотек конечно не лохи и не ламеры, и учитывают особенности подгрузки скриптов (если это качественная библиотека).

М.Голованов PanoveМожет кто поможет готовой реализацией кода?
Я привел выше код: http://www.sql.ru/forum/actualpost.aspx?bid=61&tid=581530&mid=6003826&p=1&act=quot. Он точно будет работать. Впрочем, дело Ваше.
решение будет работать, но оно дубовое. Больше никак не могу обозвать вызов функции и работу с dom-объектами страницы вне всяких функций прямо в подключаемом скрипте. Да и константные наименования id'ов и параметры в функциях должны встречаться как можно реже, иначе функция практически одноразовая.

Итак, выносим функцию из страницы в отдельный файл:

counter.js
Код: plaintext
1.
2.
3.
4.
5.
function countdown2(idCounter, downcount){
  downcount--;
  if(!downcount){ window.location="./";return; }
  document.getElementById(idCounter).innerHTML="Окно закроется через <b>"+downcount+"</b> сек.";
  setTimeout("countdown2('"+idCounter+"',"+downcount+")", 1000 );
}

Код: plaintext
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.
<!DOCTYPE html PUBLIC "-//W3C//Dtd XHTML 1.0 Strict//EN"
   "http://www.w3.org/TR/xhtml1/Dtd/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="ru-RU" xml:lang="ru-RU">
<head>
<title>Untitled Document</title>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />
<script type="text/javascript" src="counter.js"></script>
<script>
window.onload = function() {
	document.getElementById("waitblock").style.display="block";
	countdown2("downloadhtml", 11 );
}
</script>
</head>
<body>
<table cellspacing="0" cellpadding="2" align="center" border="0">   
	<tr>
		<td noWrap width="200" bgColor="#e6f4fd">Внимание! <br></td>
		<td noWrap width="200" bgColor="#e6f4fd" valign="center">
			<div id="waitblock" style="display: none">
			<p id="downloadhtml" align="center"></p></div>
			<div id="linkblock" style="display: none">
				<a href="./" target="_blank">Нажмите для перехода!</A>
			</div>
		</td></tr></table>
</body>
</html>

или так (хотя xthml-доктайпы не позволяют иметь script в body):

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<title>Untitled Document</title>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />
<script type="text/javascript" src="counter.js"></script>
</head>
<body>
<table cellspacing="0" cellpadding="2" align="center" border="0">   
	<tr>
		<td noWrap width="200" bgColor="#e6f4fd">Внимание! <br></td>
		<td noWrap width="200" bgColor="#e6f4fd" valign="center">
			<div id="waitblock" style="display: none">
			<p id="downloadhtml" align="center">
			</p></div>
			<div id="linkblock" style="display: none">
				<a href="./" target="_blank">Нажмите для перехода!</A>
			</div>
			<script>
				document.getElementById("waitblock").style.display="block";
				countdown2("downloadhtml", 11 );
			</script>	
		</td></tr></table>
</body>
</html>
...
Рейтинг: 0 / 0
Вынос кода JS для include
    #35461720
apapacy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
М.ГоловановФантазируйте дальше.

Продолжаю...

Я действительно не исслеждовал глубоко этот вопрос и благодарен Вам за то, что Вы наконец помогли это сделать мне.

При загрузке скриптов в обычном стиле. то есть

Код: plaintext
1.
2.
3.
<script src=...></script>
<script src=...></script>
<script src=...></script>

все браузеры кроме Сафари терпеливо ждут загрузки и выполнения предыдущего скрипта.
(то есть Вы пости правы, хотя YUI учитывает этот момент).

При загрузке скриптов а-ля Серж

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
<div></div>
<script>
var script = document.createElement("SCRIPT");
script.src="test0.js?rand="+Math.random();
document.getElementsByTagName("DIV")[ 0 ].appendChild(script);
script = document.createElement("SCRIPT");
script.src="test1.php?rand="+Math.random();
document.getElementsByTagName("DIV")[ 0 ].appendChild(script);
script = document.createElement("SCRIPT");
script.src="test0.js?rand="+Math.random();
document.getElementsByTagName("DIV")[ 0 ].appendChild(script);
script = document.createElement("SCRIPT");
script.src="test1.php?rand="+Math.random();
document.getElementsByTagName("DIV")[ 0 ].appendChild(script);
</script>

Терпения не хватает у ИЕ. Можете протетсировать

http://test1234.ho.ua/test/test_script.html?ww=44566

Там скрипт script0.js выводит алерт со своимименем.
А скрипт script1.php делает то же самое но со sleep(15)

Opera же терпеливо ожидает и в этом случае. Остальные браузеры тестировать неохота. Так как приведенного кода достаточно для того, чтобы не ориентироваться на порядок загрузки скриптов.

(За что и нравится мне форум, что заставляет сделать порой отложенные в долгий ящик работы)
...
Рейтинг: 0 / 0
Вынос кода JS для include
    #35461724
apapacy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати я был почти уверен в правоте так как порядок загрузки и выполнения скриптов зависит от параметра элемента SCRIPT defer, который является факультативным по спецификации.
...
Рейтинг: 0 / 0
Вынос кода JS для include
    #35461739
Panove
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
illionИтак, выносим функцию из страницы в отдельный файл:

Спасибо большое, после небольшой модернизации подходит идеально!
Пример, предоставленный М.Головановым тоже пригодился! Всем спасибо за помощь и разъяснения по ходу дискуссии - было познавательно!
...
Рейтинг: 0 / 0
25 сообщений из 25, страница 1 из 1
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / Вынос кода JS для include
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]