Почти Сисадминские байки.
Прислали мне ссылку на сайт "Аделаида", где сейчас находится
продолжение истории "Русские программисты никогда...", которая
ранее пробегала у меня в журнале. Автор добавил еще несколько пунктов, о чем
меня и известил. Но, погодите, не тыкайте туда сразу. Сча, объясню.
В последнее время все ударились в шутку с яваскриптовскими алертами. Автора
указанного ресурса это поветрие не миновало :) Так что, как зайдете (если у
вас JavaScript включен) нажмите кнопку "Отмена". Ну, или можете не
нажимать, тогда кнопочки потыкаете всласть :)
Кстати, насчет того, что это лечится только "Ctrl_Alt_Del" - да ну!?
Таким образом закроются все открытые окна браузера, а это надо? Очень простой
выход, между прочим, есть: после нажатия кнопки alert'а быстренько давим
пальцами на Alt-F4. Закроется только это окно.
Мда, а вот собственно, как это делается (я тут еще сделал немного примеров):
Пример 1 (пример работы здесь).
<script>
alert("простейший пример");
if (confirm('закрыть окно?'))
java:close();
</script>
Пример 2 (пример работы здесь).
<script>
if (confirm('вход в блок обработки')) {
a=confirm('Возвращаемое значение Ok = 1, Cancel = 0');
if(a==0)
alert('a==0');
else if(a==1)
alert('a==1');
else
alert('a!=0 & a!=1');
if (navigator.appVersion.indexOf("MSIE 4.0") != -1)
alert ("MSIE 4.0");
else if (navigator.appVersion.indexOf("MSIE 5.0") != -1)
alert ("MSIE 5.0");
else
alert('браузер неMSIE 4.0 или 5.0');
}
if (confirm('закрыть окно?'))
java:close();
</script>
Я тут кой-чего для удобства добавил (типа java:close(); - закрывает текущее
окно браузера) Как видите, язык - практически один-в-один по синтаксису как
"С". Поэтому работать удобно. Единственное, что нужно - так это взять
список функций и элементов классов (ну, хотя бы для того, чтобы определять версию
и пр., кстати, кто поделится хорошей ссылкой?).
Для чего это может быть полезно? Для начала надо заметить, что код может быть
помещен в любой части документа и выполнен будет по ходу появления, а значит,
пользователь может на ходу управлять загрузкой необходимых частей документа.
Например: "Будем грузить оставшуюся часть документа с картинками?"
или "увеличить шрифт прямо сейчас?". Как это делается:
Существует функция у класса document, определена она как мне
думается write(char*); (хотя точно не скажу насчет
типа параметров, но принимает-то она строку!), ну да не суть важно,
важно что обращение к функции document.write(); дает возможность
генерить нужный код прямо по ходу дела.
Итак, Пример 3 (пример работы здесь):
<script>
alert("простейший пример");
if(confirm('Большой шрифт?'))
document.write('<FONT SIZE="+4">');
else
document.write('<FONT SIZE="+1">');
</script>
<UL>
TEST
</UL>
<script>
document.write('</FONT>');
</script>
Сходите, проверьте как работает. Окно не закрывайте, а после отработки всего
скрипта поглядите получившийся код документа (View Source).
document.write('<FONT SIZE="+4">');
тут же будет выдавать браузеру то, что у нее стоит в параметрах. Т.е. в зависимости
от выбора шрифт будет маленький или большой. Выдавать-то можно вообще, все что
угодно. Самого себя (свой код) тоже можно - таким образом это все зацикливается,
кстати. Вот интересно, "вынести" браузер бесконечной вложенностью
удастся или нет? :) Проверьте, коли будет желание.
Да, можете заметить, что удобно сделаны пары кавычек: либо одинарные, либо двойные.
В примере нужно было использовать (на самом деле можно и без них) двойные
кавычки в указании размера - вот как раз такой случай.
Теперь еще момент: блок скрипта разбит надвое - это сделано для того, чтобы
не было лишнего </FONT> тэга, если ява-скрипт у браузера
отключен. Т.е. закрывающий /FONT тэг будет только в том случае,
если сработает первый блок скрипта. Ну, это наверное, понятно и так, чего тут
писать. Можете отключить JavaScript у браузера и проверить - получите на экране
только то, что стоит вне директив скрипта. Однако, ViewSource теперь покажет
вам весь код страницы.
Еще одно полезное применение: можно подгружать в автомате для разных версий
браузеров разные страницы. В принципе, можно определить Referrer, откуда зашел
посетитель и по ходу написать его.
Referrer:
Я рискнул вставить код прямо сюда. Если вы видите "void", то
видимо зашли на мой адрес впрямую, если "что-то", то с какой-то ссылки
на меня. Кстати, там может стоять и "undefined" - тоже понятно,
почему.
Ну, и если вы ничего не видите после слова "Referrer", .. тады - "ой"...
значит ява отключена или ее нет вообще или что-то у кого-то не той версии :).
Код простой:
<FONT SIZE="+2">Referrer:
<SCRIPT>
pageref = escape(document.referrer)+"";
if (pageref == "") {pageref = "void";}
document.write(pageref);
</SCRIPT>
</FONT>
В принципе, можно было написать document.write(document.referrer); но
функция escape(); переделывает последовательность символов, заменяя недопустимые
для параметров символы на esc-последовательности. Типа ":" на "%3A", пробел на "%20"
и т.п., да и работать с переменной удобнее, чтобы задавать при пустой строке
строку-заменитель, например. Вообще, для этого примера лучше было бы сделать без
функции escape();, но я для правильности оставил.
Мда... Ну, хватит, пожалуй на сегодня. Боюсь утомить неискушенного читателя
и довести до зевоты искушенного. :)
|