Форум программистов, компьютерный форум, киберфорум
Наши страницы

JavaScript

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 240, средняя оценка - 4.63
Vovan-VE
13148 / 6531 / 188
Регистрация: 10.01.2008
Сообщений: 15,071
#1

FAQ по JavaScript - JavaScript

19.07.2010, 18:55. Просмотров 31783. Ответов 17

Как запретить пользователю просмотреть код страницы?
Никак.
Существующие способы, базирующиеся на языке JavaScript, не позволяют достичь принципиальной защиты. Они приемлемы лишь для защиты от неопытных пользователей.

Как с помощью JavaScript подгрузить произвольный file.js?
Javascript
1
2
3
<script language="JavaScript">
document.write("<"+"script language=\"JavaScript\" src='...'></"+"script>");
</script>
тег </script> необходимо разбить, чтобы браузер не думал, что внешний скрипт закончился на этом теге.

Как работать с cookie?
Cookie позволяют хранить данные подобно глобальным переменным. Работать с cookie можно с помощью таких функций:
Javascript
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
/**
 * 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 "";
}
Как запросить подтверждение у пользователя при переходе по ссылке?
HTML5
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. Можно написать
HTML5
1
<a href="file.html?123">
тогда в файле file.html можно будет прочитать переменную location.search, которая будет содержать "?123". Остается взять часть строки со второго по счету символа: location.search.substring(1).

Для передачи нескольких параметров, к примеру так: file.html?x=1&y=2, можно предложить несложную функцию, которая, будучи записана в file.html, вернет значение переменной с указанным именем:
Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
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:
HTML5
1
<a href="javascript:f()">
Либо можно записать код JavaScript в атрибуты обработчиков событий, например onclick, onmouseover, onsubmit. При этом префикс "javascript:" писать не следует.

Если хочется, чтобы вызов события не привел к действию, например нажатие на ссылку не привело к переходу по ней, следует возвратить false, иначе возвратить true.

Пример:
HTML5
1
 <a href="target.html" onclick="alert('HELLO'); return false">
при нажатии на ссылку переход по ней осуществлен не будет, вместо этого появится окошко со словом "HELLO". Но если открыть эту ссылку в новое окно, то загрузится target.html.

Можно, к примеру, сделать проверку правильности заполнения формы:
HTML5
1
<form action="" onsubmit="return check()">
Функция check() должна будет либо вернуть true, тогда форма отправится, либо false, тогда нет.

По поводу протокола javascript:
  1. javascript: есть протокол (как http:, mailto: и т. д.)
  2. ссылка c javascript-протоколом имеет вид javascript:выражение (в отличие от event handler'oв - не содержимое функции, поэтому она не может содержать return)
  3. при клике на эту ссылку браузер поступает следующим образом:
    1. вычисляет выражение. Если имеются побочные эффекты (напр. window.open), они выполняются
    2. если выражение возвращает результат, отличный от undefined...
    3. ...результат преобразуется к типу string и используется в качестве контента для новой страницы (введите, к примеру, в адресную строку javascript:1+1)

Почему у меня не получается впечатать в документ с помощью document.write SSI-инструкцию?
Вопрос:
Я пытаюсь впечатать в документ SSI-инструкцию такой строчкой:
Javascript
1
document.write("<!--#include virtual=\""+file+".shtml\" -->");
но она почему-то не исполняется? Что я делаю неправильно?
Ответ:
Дело в том, что SSI (Server Side Includes) исполняются на сервере. Т.е. когда сервер уже отдал документ клиентскому браузеру, то он (сервер) уже не властен над этим документом. И когда вы пытаетесь впечатать в документ SSI-инструкцию, ее уже некому исполнять.

Как убрать оформление текущего окна?
Никак. Если не считать различных "хакерских" трюков, работающих в отдельных браузерах на отдельных платформах.

Как запретить выделение текста мышкой?
MSIE:
HTML5
1
<body onselectstart="return false">
Mozilla:
Javascript
1
document.onmousedown=function(){return false}
или указав для body стиль -moz-user-select: none

Работа с textarea. Как переместить каретку? Как получить выделенный текст?
Чистое javascript-решение возможно только в MSIE 4 и выше. Для манипуляций с выделенной областью существует объект TextRange. Пример:
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<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
1
2
3
4
5
6
7
8
function task1() {
  // Здесь что-то делаем, после чего надо подождать пару секунд
  setTimeout("task2()", 2000);
}
 
function task2() {
  // Продолжаем выполнение после двухсекундной задержки
}
Как заставить скрипт выполняться много раз через определенное время?
Если интервал повтора всегда одинаковый, то следует воспользоваться функцией setInterval():
Javascript
1
2
3
4
5
function func() {
    // что-то делаем
}
// регистрируем периодический вызов функции через 1 секунду
setInterval("func()", 1000);
Как отменить назначенный таймаут/интервал (setTimeout/setInterval)?
Функции setTimeout() и setInterval() возвращают число, которое является идентификатором созданного таймаута/интервала. Этот идентификатор можно использовать в функциях clearTimeout() и clearInterval() для отмены setTimeout() и setInterval() соответсвенно.

Пример:
Javascript
1
2
3
4
5
6
function test() {
    // этот код не будет выполнен
    alert();
}
var N = setTimeout("test()", 5000);
clearTimeout(N);
Для чего в JavaScript используется символ "$" ?
Символ $ в JavaScript является "буквой". Его можно использовать на равне в латинскими буквами в именах переменных, функций и т.п. Примеры:
Javascript
1
2
3
4
var a$ = 1, $b = 2, $c$ = 3, d$ = 4, $$$ = 5, $ = 6;
function $f() {
    return;
}

По материалам Xpoint
38
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.07.2010, 18:55
Я подобрал для вас темы с готовыми решениями и ответами на вопрос FAQ по JavaScript (JavaScript):

Вставка элементов меню (содержащих javascript) через javascript - JavaScript
Пишу курсовой проект по JavaScript в ходе которого потребовалось создать небольшой локальный сайт, страничек довольно много и я решил, при...

Выполнение Javascript файла в котором присутствуют javascript теги - JavaScript
text1.js &lt;link href='http://alexgorbatchev.com/pub/sh/2.1.364/styles/shCore.css' rel='stylesheet' type='text/css'/&gt; ...

Выпадающие дивы для FAQ - JavaScript
Добрый день! Нашел вот такое решение для реализации &quot;выпадающих дивов&quot; для раздела FAQ...

Как перезагрузить javascript, javascript-ом? - JavaScript
как с помощью javascript перезагрузить javascript ? Смысл в том что один из моих скриптов выполняет функцию раскрытия новости, но когда...

Javascript (codeacademy - "'WHILE' LOOPS IN JAVASCRIPT(Dragon Slayer!)") - JavaScript
Пожалуйста, помогите прочитать этот код!!! var slaying = true; // A bit of new math magic to calculate the odds // of hitting the...

javascript внутри javascript - JavaScript
Здравствуйте. Помогите решить задачу. Нужно на html странице под спойлером в textarea поставить ссылку с window.open ( для копирования)....

17
BANO
Ренегат
Эксперт HTML/CSS
1630 / 1059 / 292
Регистрация: 06.08.2014
Сообщений: 5,203
Записей в блоге: 1
17.08.2015, 23:18 #16
УДАЛЕНИЕ ДУБЛЕЙ ИЗ МАССИВА
аргумент - массив с дублями, причём любыми(объекты, строки, числа и тд и тп)
выход - массив без дублей
Javascript
1
2
3
4
5
6
7
8
function(arr){
    var s=0;
    arr.forEach(function(e,i,arr){
        while ((s=arr.indexOf(e,i))!=-1)
            arr.splice(s,1);
    });
    return arr;
}
0
Unick
не Администратор ^_^
985 / 219 / 11
Регистрация: 03.05.2009
Сообщений: 1,478
Записей в блоге: 1
18.08.2015, 10:36 #17
Цитата Сообщение от BANO Посмотреть сообщение
кстати в сумме с запретом на контекстное меню, можно будет хорошенько потрепать нервы любителям посмотреть код)
любителей это даже не напряжет.
и еще, на маке cmd+alt+i (меню -> дополнительные настройки -> инструменты разработчика)
0
BANO
Ренегат
Эксперт HTML/CSS
1630 / 1059 / 292
Регистрация: 06.08.2014
Сообщений: 5,203
Записей в блоге: 1
18.08.2015, 11:02 #18
Unick, ну я не помню, чтобы у меня было много знакомых любителей посмотреть код вообще, а из них пользуется маком только 1, так что это в любом случае спасает только от случайно нажавжих кнопку инструментов разраба
0
18.08.2015, 11:02
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.08.2015, 11:02
Привет! Вот еще темы с ответами:

Java и javascript. Передать переменную из Java в Javascript - JavaScript
Здравствуйте,уважаемые форумчане! Я начинающий программист. Разбираюсь в создании JSP страниц. Необходимо передать в переменную,...

Чем определяется одинаковость урлов /page?FAQ и /page.php?FAQ - PHP
Подскажите, пожалуйста, какая опция php или настройка сервера позволяет не указывать .php в урлах? Просто раньше у меня на сайте работал...

С++11 и С++14 FAQ - C++
На сайте http://isocpp.org/ был опубликован анонс нового C++ FAQ. Материал довольно объемный и содержит разделы для начинающих, вопросы...

FAQ - PHP
Не могу скачать документацию http://ua2.php.net/get/php_enhanced_ru.chm/from/a/mirror , не вижу зеркала, может у кого есть локально дайте...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru