|
|
|
| В браузерах есть команда Вид - Выделить всё - Копировать в буфер.
Как отключить эти возможности для браузеров ФФ и Опера? | |
|
|
|
|
|
|
|
для: Владимир55
(30.12.2011 в 11:12)
| | http://snowcore.blogspot.com/2008/04/prevent-text-selection.html - как бы противодействует выделению. Надо только добавить включение этой функции непрерывно (через тайм-аут или интервал) и скопировать страницу в браузере не удастся. | |
|
|
|
|
|
|
|
для: АЯС
(30.12.2011 в 11:34)
| | А общее выделение, выделение всего контента страницы вцелом, или копирование выделенного (если запретить выделение сложно), как-то иначе можно отключить? | |
|
|
|
|
|
|
|
для: Владимир55
(30.12.2011 в 11:52)
| | можно отловить клик по клавише control. без нее не получится сделать Ctrl+A и Ctrl+С. но выбрать все можно и из выпадающего меню. так что опять не катит. я на сайте с тестом, где нельзя было давать смотреть исходный код, открывала новое окно во весь экран, без панелей, запрещала правый клик, запрещала нажатие на ctrl. но это все - меры вынужденные и не совсем результативные. | |
|
|
|
|
|
|
|
для: Владимир55
(30.12.2011 в 11:52)
| | Вы, по-моему, не поняли сути написанного мною выше.
Выделение любое - хоть части страницы, хоть всей, что с помощью мыши на странице, что с помощью нажатия пункта меню "выделить всё", что с помощью комбинации клавиш ctrl+A - этот скрипт отлавливает и выделение убирает.
Надо только включать эту функцию непрерывно с малым интервалом времени - за 10 миллисекунд никто не успеет выделить и затем скопировать. | |
|
|
|
|
|
|
|
для: АЯС
(30.12.2011 в 15:50)
| | Точно, изначально я эту идею не уловил. Теперь только дошло!
Спасибо! | |
|
|
|
|
|
|
|
для: АЯС
(30.12.2011 в 15:50)
| | Уловить-то эту идею я уловил, а вот реализовать не получается!
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<title>Новая страница 1</title>
<script>
function clearSelection()
{
var sel;
if(document.selection && document.selection.empty)
{
document.selection.empty();
}
else if(window.getSelection)
{
sel = window.getSelection();
if(sel && sel.removeAllRanges)
sel.removeAllRanges();
}
}
</script>
</head>
<body>
ПРИМЕР
</body>
</html>
|
| |
|
|
|
|
|
|
|
для: Владимир55
(31.12.2011 в 12:22)
| |
...
<script>
function clearSelection ()
{
if (document.selection && document.selection.empty) document.selection.empty ();
else if (window.getSelection)
{
var sel = window.getSelection ();
if (sel && sel.removeAllRanges)
sel.removeAllRanges ();
}
}
setInterval (clearSelection, 10);
</script>
</head>
...
|
| |
|
|
|
|
|
|
|
для: АЯС
(31.12.2011 в 12:24)
| | Большое спасибо!
Получилось настолько здорово, что я и не ожидал!
Есть только один вопрос и один нюанс.
Вопрос: повлияет ли на работу этой конструкции какой-то вариант DOCTYPE (и вообще наличие DOCTYPE)?
Нюанс: нет препятствия для скачивания картинки Правая кнопка мыши – Сохранить изображение.
В коде, приведенном в http://softtime.ru/forum/read.php?id_forum=4&id_theme=84099&page=1 автор: deimand (29.12.2011 в 11:48), этот дефект отсутствует.
Можно ли объединить созданный Вами код с этим для того, чтобы и скачивание правой кнопкой запретить тоже?
Код по упомянутой ссылке такой:
<script>
function preventSelection(element){
var preventSelection = false;
function addHandler(element, event, handler){
if (element.attachEvent)
element.attachEvent('on' + event, handler);
else
if (element.addEventListener)
element.addEventListener(event, handler, false);
}
function removeSelection(){
if (window.getSelection) { window.getSelection().removeAllRanges(); }
else if (document.selection && document.selection.clear)
document.selection.clear();
}
function killCtrlA(event){
var event = event || window.event;
var sender = event.target || event.srcElement;
if (sender.tagName.match(/INPUT|TEXTAREA/i))
return;
var key = event.keyCode || event.which;
if (event.ctrlKey && key == 'A'.charCodeAt(0))
{
removeSelection();
if (event.preventDefault)
event.preventDefault();
else
event.returnValue = false;
}
}
addHandler(element, 'mousemove', function(){
if(preventSelection)
removeSelection();
});
addHandler(element, 'mousedown', function(event){
var event = event || window.event;
var sender = event.target || event.srcElement;
preventSelection = !sender.tagName.match(/INPUT|TEXTAREA/i);
});
addHandler(element, 'mouseup', function(){
if (preventSelection)
removeSelection();
preventSelection = false;
});
addHandler(element, 'keydown', killCtrlA);
addHandler(element, 'keyup', killCtrlA);
}
document.ondragstart = test;
preventSelection(document);
document.onselectstart = test;
document.oncontextmenu = test;
function test() {return false}</script>
)
|
| |
|
|
|
|
|
|
|
для: Владимир55
(31.12.2011 в 14:22)
| | <DOCTYPE> определяет правила написания HTML-кода и отдельных тегов.
А здесь речь идёт исключительно о JavaScript'e, который работает на документе.
Так что - никакого влияния <DOCTYPE> на работу скрипта не имеет.
-----
Приведённый вами код разбирать не буду.
Просто напишу ещё продолжение "моего" скрипта, который теперь, кроме отмены выделения содержимого страницы, будет ещё и блокировать вызов контекстного меню:
...
<script>
//запрет на выделение контента страницы
function clearSelection ()
{
if (document.selection && document.selection.empty) document.selection.empty ();
else if (window.getSelection)
{
var sel = window.getSelection ();
if (sel && sel.removeAllRanges) sel.removeAllRanges ();
}
}
setInterval (clearSelection, 10);
//отмена вывода контекстного меню
function hideContextMenu (ev)
{
var e = ev || window.event;
if (e.preventDefault) e.preventDefault ();
else e.returnValue = false;
}
if (document.addEventListener) document.addEventListener ( 'contextmenu', hideContextMenu);
else if (document.attachEvent) document.attachEvent ('oncontextmenu', hideContextMenu);
</script>
</head>
...
|
| |
|
|
|
|
|
|
|
для: АЯС
(31.12.2011 в 15:45)
| | Теперь всё замечательно работает, большое спасибо! | |
|
|
|
|
|
|
|
для: Владимир55
(01.01.2012 в 15:01)
| | Выскакивает синтаксическая ошибка вот в этой строке:
if (document.selection && document.selection.empty) document.selection.empty ();
|
или в этой:
else if (window.getSelection)
|
| |
|
|
|
|
|
|
|
для: Владимир55
(01.01.2012 в 23:18)
| | 1. После какого вашего действия "выскакивает"?
2. В каком браузере "выскакивает"?
3. Есть ли ещё подключаемые скрипты на странице, кроме "моего"? Надеюсь, вы не подключили ещё и приведённый вами скрипт от deimand'а? Или таки подключили? | |
|
|
|
|
 26.8 Кб |
|
|
для: АЯС
(02.01.2012 в 11:14)
| | Нет, ничего дополнительно я в Ваш скрипт не вписывал, но вынес его в отдельный файл. При этом на странице остался код вызова
<script type="text/javascript" src="../hide.js"></script>
|
А в файле hide.js размещен созданный Вами код. На всякий случай, я повторяю его как он там есть:
// JavaScript Document
//запрет на выделение контента страницы
function clearSelection ()
{
if (document.selection && document.selection.empty) document.selection.empty ();
else if (window.getSelection)
{
var sel = window.getSelection ();
if (sel && sel.removeAllRanges) sel.removeAllRanges ();
}
}
setInterval (clearSelection, 10);
//отмена вывода контекстного меню
function hideContextMenu (ev)
{
var e = ev || window.event;
if (e.preventDefault) e.preventDefault ();
else e.returnValue = false;
}
if (document.addEventListener) document.addEventListener ( 'contextmenu', hideContextMenu);
else if (document.attachEvent) document.attachEvent ('oncontextmenu', hideContextMenu);
|
А Dreamweaver CS5 пишет "Синтаксическая ошибка", указывая на упомянутые строки.
Хотя сам скрипт работает безупречно! И ни один из браузеров не дает никаких сообщений об ошибке.
Может, у самого редактора глюк.
Ради любопытства, проверил сервисом http://www.javascriptlint.com/online_lint.php Скриншот в приложении.
(В приницпе, всё это несущественно - система работает, а это главное!) | |
|
|
|
|
 38.5 Кб |
|
|
для: Владимир55
(02.01.2012 в 12:40)
| | На всякий случай сделал скриншот из Dreamweaver (в приложении).
Но это уже просто так, из любопытства. Система работает - а это главное!
Так что ещё раз спасибо! | |
|
|
|
|
|
|
|
для: Владимир55
(02.01.2012 в 12:53)
| | Теперь понятно.
Разработчики редакторов просто плохо знают синтаксис Javascript'а
И требуют обязательного наличия фигурных скобок ("curly braces") в операторе if () {} else {}
А они (фигурные скобки) совершенно не обязательны, если по условию if () или else исполняется всего ОДИН оператор (а не два, не три и т. д.)
Посмотрите примеры на странице http://msdn.microsoft.com/en-us/library/85yyde5c%28v=VS.94%29.aspx - там как раз даны ПРАВИЛЬНЫЕ примеры (первые три) и один неправильный (последний), к которому есть пояснение:
"In this case, there is a syntax error, because there is more than one statement between the if and else statements. Braces are required around the statements between if and else." ,
что переводится так:
"В данном случае имеются синтаксические ошибки, потому что есть более одного оператора между if () и else. Требуется заключить в фигурные скобки всё, что находится между If () и else" | |
|
|
|