Chevy | Дата: Среда, 24.08.2011, 14:41 | Сообщение # 1 |
|
Администраторы |
Генералиссимус |
"Нет титула" |
Сообщений: 85 |
|
|
Offline |
| Как запретить пользователю просмотреть код страницы? Никак. Существующие способы, базирующиеся на языке JavaScript, не позволяют достичь принципиальной защиты. Они приемлемы лишь для защиты от неопытных пользователей.
Как с помощью JavaScript подгрузить произвольный file.js? Код Javascript
<script language="JavaScript"> document.write("<"+"script language=\"JavaScript\" src='...'></"+"script>"); </script> тег </script> необходимо разбить, чтобы браузер не думал, что внешний скрипт закончился на этом теге.
Как работать с cookie? Cookie позволяют хранить данные подобно глобальным переменным. Работать с cookie можно с помощью таких функций: Код Javascript
/** * cookieName - имя cookie * cookieContent - что записываем * cookieExpireTime - сколько времени будут жить cookie в часах. Если 0 - то помрут вместе с закрытием браузера. */ function setCookie(cookieName, cookieContent, cookieExpireTime){ if(cookieExpireTime>0){ var expDate=new Date(); expDate.setTime(expDate.getTime()+cookieExpireTime*1000*60*60); var expires=expDate.toGMTString(); document.cookie=cookieName+"="+escape(cookieContent)+"; path="+escape('/')+"; expires="+expires; }else{ document.cookie=cookieName+"="+escape(cookieContent)+"; path="+escape('/')+""; } }
function getCookie(cookieName){ var ourCookie=document.cookie; if(!ourCookie || ourCookie=="")return ""; ourCookie=ourCookie.split(";"); var i=0; var Cookie; while(i<ourCookie.length){ Cookie=ourCookie[i].split("=")[0]; if(Cookie.charAt(0)==" ") Cookie=Cookie.substring(1); if (Cookie == cookieName){ var res = ourCookie[i].split('=')[1]; return (typeof res != 'undefined') ? unescape(res) : ''; } i++; } return ""; } Как запросить подтверждение у пользователя при переходе по ссылке? Код HTML 1 <a href="url" onclick="return confirm('Уверены?')">...</a> Как отследить события клавиатуры? Рассмотрим это на примере отслеживания нажатия кнопки "S" Код Javascript 1 2 3 4 function kdown(e){ if (e.keyCode == 'S'.charCodeAt(0)) alert('S pressed'); } document.onkeydown=kdown; Не получается обратиться к свойству другого фрейма/окна. Если содержимое другого фрейма (окна) представляет собой документ с чужого сервера (домена), то ничего сделать нельзя из соображений безопасности. Если странички лежат на разных поддоменах (например, a.site.ru и b.site.ru) и вы имеете доступ до тех и других, пропишите в них document.domain="site.ru"
Соображения безопасности тут такие: К примеру, вы работаете с каким-нибудь администраторским интерфейсом или читаете почту через веб-форму. Некто присылает вам ссылку "приколись, чувак, новый секретный мультик про Масяню", вы открываете ее, а там страница, которая грузит к себе во фрейм этот самый ваш запароленный интерфейс и делает с ним, что хочет - ведь браузер запомнил ваш пароль.
Может быть, что вы просто неправильно пишете путь к фрейму. Правильный путь top.название_окна.frames.имя_фрейма . Если окно - текущее, то название окна можно опустить, получится top.frames.имя_фрейма .
У меня сайт с фреймами, но человек может загрузить какой-то фрейм отдельно. Как подсунуть ему фреймсет? У объекта window есть свойства parent и top, которые ссылаются на содержащие его окна (top ссылается на окно самого верхнего уровня). Если страница загружена не во фреймсете, эти свойства ссылаются на само окно.
В результате получаем что-то вроде Код Javascript 1 if(parent==this) location="адрес страницы с фреймсетом"; Также, у окна есть свойство frames, ссылающееся на массив фреймов. Если мы уверены, что страницы, подгружающиеся во фреймы основного окна сайта, не являются в свою очередь фреймсетами - можно проверить parent.frames.length . В этом случае получится следующее Код Javascript 1 if(!parent.frames.length) location="адрес страницы с фреймсетом"; О том, как сделать, чтобы в этом фреймсете открывалась нужная страница, читайте здесь.
Все вышесказанное касается и страниц, подгружаемых в iframe.
Как передать параметр в загружаемый документ и прочитать его там? Через строку запроса, как это происходит при передаче данных серверу методом GET. Можно написать Код HTML 1 <a href="file.html?123"> тогда в файле file.html можно будет прочитать переменную location.search, которая будет содержать "?123". Остается взять часть строки со второго по счету символа: location.search.substring(1).
Для передачи нескольких параметров, к примеру так: file.html?x=1&y=2, можно предложить несложную функцию, которая, будучи записана в file.html, вернет значение переменной с указанным именем: Код Javascript
function getVariable(varName){ var arg=location.search.substring(1).split('&'); var variable=""; var i; for(i=0;i<arg.length;i++){ if(arg[i].split('=')[0]==varName){ if(arg[i].split('=').length>1){ variable=arg[i].split('=')[1]; } return variable; } } return ""; } Как вызвать функцию JavaScript при нажатии на ссылку или кнопку в форме? Можно записать в атрибут HREF тега <A> вызов кода JavaScript: Код HTML 1 <a href="javascript:f()"> Либо можно записать код JavaScript в атрибуты обработчиков событий, например onclick, onmouseover, onsubmit. При этом префикс "javascript:" писать не следует.
Если хочется, чтобы вызов события не привел к действию, например нажатие на ссылку не привело к переходу по ней, следует возвратить false, иначе возвратить true.
Пример: Код HTML 1 <a href="target.html" onclick="alert('HELLO'); return false"> при нажатии на ссылку переход по ней осуществлен не будет, вместо этого появится окошко со словом "HELLO". Но если открыть эту ссылку в новое окно, то загрузится target.html.
Можно, к примеру, сделать проверку правильности заполнения формы: Код HTML 1 <form action="" onsubmit="return check()"> Функция check() должна будет либо вернуть true, тогда форма отправится, либо false, тогда нет.
По поводу протокола javascript: javascript: есть протокол (как http:, mailto: и т. д.) ссылка c javascript-протоколом имеет вид javascript:выражение (в отличие от event handler'oв - не содержимое функции, поэтому она не может содержать return) при клике на эту ссылку браузер поступает следующим образом: вычисляет выражение. Если имеются побочные эффекты (напр. window.open), они выполняются если выражение возвращает результат, отличный от undefined... ...результат преобразуется к типу string и используется в качестве контента для новой страницы (введите, к примеру, в адресную строку javascript:1+1)
Почему у меня не получается впечатать в документ с помощью document.write SSI-инструкцию? Вопрос: Я пытаюсь впечатать в документ SSI-инструкцию такой строчкой: Код Javascript 1 document.write("<!--#include virtual=\""+file+".shtml\" -->"); но она почему-то не исполняется? Что я делаю неправильно? Ответ: Дело в том, что SSI (Server Side Includes) исполняются на сервере. Т.е. когда сервер уже отдал документ клиентскому браузеру, то он (сервер) уже не властен над этим документом. И когда вы пытаетесь впечатать в документ SSI-инструкцию, ее уже некому исполнять.
Как убрать оформление текущего окна? Никак. Если не считать различных "хакерских" трюков, работающих в отдельных браузерах на отдельных платформах.
Как запретить выделение текста мышкой? MSIE: Код HTML 1 <body onselectstart="return false"> Mozilla: Код Javascript 1 document.onmousedown=function(){return false} или указав для body стиль -moz-user-select: none
Работа с textarea. Как переместить каретку? Как получить выделенный текст? Чистое javascript-решение возможно только в MSIE 4 и выше. Для манипуляций с выделенной областью существует объект TextRange. Пример: Код HTML
<textarea id="myTextArea">The text</textarea> <button onclick="test()">Test</button> <script> function test() { var myTextArea = document.getElementById('myTextArea'); // убедиться, что каретка находится в текстовом поле myTextArea.focus(); // создать объект TextRange на основе текущего выделения var rng=document.selection.createRange(); // расширить выделение на 3 символа вправо rng.moveEnd('character',3); // сделать выделение текущим rng.select(); // достать выделенный текст alert(rng.text); } </script> Как распечатать один из фреймов? Если просто написать Код Javascript 1 top.frames[3].print(); то, скорее всего, распечатается не тот фрейм, который нужен. Необходимо сначала передать нужному фрейму фокус, после чего можно вызывать функцию print всего окна: Код Javascript 1 2 top.frames[3].focus(); top.print(); Как заменить перенос строки на <BR>? На Windows перевод строки - это два символа \r\n (коды 13 и 10), на Юниксах - один символ: \n, под Макинтош - \r. Учитывая все три варианта: Код Javascript 1 myText = myText.replace(/\r\n?|\n/g,"<br>"); Как приостановить выполнение скрипта? Если программе нужно что-то сделать позже, можно установить для этого таймаут: Код Javascript
function task1() { // Здесь что-то делаем, после чего надо подождать пару секунд setTimeout("task2()", 2000); }
function task2() { // Продолжаем выполнение после двухсекундной задержки } Как заставить скрипт выполняться много раз через определенное время? Если интервал повтора всегда одинаковый, то следует воспользоваться функцией setInterval(): Код Javascript
function func() { // что-то делаем } // регистрируем периодический вызов функции через 1 секунду setInterval("func()", 1000); Как отменить назначенный таймаут/интервал (setTimeout/setInterval)? Функции setTimeout() и setInterval() возвращают число, которое является идентификатором созданного таймаута/интервала. Этот идентификатор можно использовать в функциях clearTimeout() и clearInterval() для отмены setTimeout() и setInterval() соответсвенно.
Пример: Код Javascript
function test() { // этот код не будет выполнен alert(); } var N = setTimeout("test()", 5000); clearTimeout(N); Для чего в JavaScript используется символ "$" ? Символ $ в JavaScript является "буквой". Его можно использовать на равне в латинскими буквами в именах переменных, функций и т.п. Примеры: Код Javascript
var a$ = 1, $b = 2, $c$ = 3, d$ = 4, $$$ = 5, $ = 6; function $f() { return; }
|
|
| |