Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

HTML+CSS+JavaScript

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Как в браузерах ФФ и Опера отключить выделение и копирование текста?
 
 автор: Владимир55   (30.12.2011 в 11:12)   письмо автору
 
 

В браузерах есть команда Вид - Выделить всё - Копировать в буфер.

Как отключить эти возможности для браузеров ФФ и Опера?

  Ответить  
 
 автор: АЯС   (30.12.2011 в 11:34)   письмо автору
 
   для: Владимир55   (30.12.2011 в 11:12)
 

http://snowcore.blogspot.com/2008/04/prevent-text-selection.html - как бы противодействует выделению. Надо только добавить включение этой функции непрерывно (через тайм-аут или интервал) и скопировать страницу в браузере не удастся.

  Ответить  
 
 автор: Владимир55   (30.12.2011 в 11:52)   письмо автору
 
   для: АЯС   (30.12.2011 в 11:34)
 

А общее выделение, выделение всего контента страницы вцелом, или копирование выделенного (если запретить выделение сложно), как-то иначе можно отключить?

  Ответить  
 
 автор: elenaki   (30.12.2011 в 12:59)   письмо автору
 
   для: Владимир55   (30.12.2011 в 11:52)
 

можно отловить клик по клавише control. без нее не получится сделать Ctrl+A и Ctrl+С. но выбрать все можно и из выпадающего меню. так что опять не катит. я на сайте с тестом, где нельзя было давать смотреть исходный код, открывала новое окно во весь экран, без панелей, запрещала правый клик, запрещала нажатие на ctrl. но это все - меры вынужденные и не совсем результативные.

  Ответить  
 
 автор: АЯС   (30.12.2011 в 15:50)   письмо автору
 
   для: Владимир55   (30.12.2011 в 11:52)
 

Вы, по-моему, не поняли сути написанного мною выше.

Выделение любое - хоть части страницы, хоть всей, что с помощью мыши на странице, что с помощью нажатия пункта меню "выделить всё", что с помощью комбинации клавиш ctrl+A - этот скрипт отлавливает и выделение убирает.

Надо только включать эту функцию непрерывно с малым интервалом времени - за 10 миллисекунд никто не успеет выделить и затем скопировать.

  Ответить  
 
 автор: Владимир55   (30.12.2011 в 16:19)   письмо автору
 
   для: АЯС   (30.12.2011 в 15:50)
 

Точно, изначально я эту идею не уловил. Теперь только дошло!

Спасибо!

  Ответить  
 
 автор: Владимир55   (31.12.2011 в 12:22)   письмо автору
 
   для: АЯС   (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>

  Ответить  
 
 автор: АЯС   (31.12.2011 в 12:24)   письмо автору
 
   для: Владимир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>
...

  Ответить  
 
 автор: Владимир55   (31.12.2011 в 14:22)   письмо автору
 
   для: АЯС   (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>  
)

  Ответить  
 
 автор: АЯС   (31.12.2011 в 15:45)   письмо автору
 
   для: Владимир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>
...

  Ответить  
 
 автор: Владимир55   (01.01.2012 в 15:01)   письмо автору
 
   для: АЯС   (31.12.2011 в 15:45)
 

Теперь всё замечательно работает, большое спасибо!

  Ответить  
 
 автор: Владимир55   (01.01.2012 в 23:18)   письмо автору
 
   для: Владимир55   (01.01.2012 в 15:01)
 

Выскакивает синтаксическая ошибка вот в этой строке:

    if (document.selection && document.selection.empty) document.selection.empty (); 


или в этой:
else if (window.getSelection)

  Ответить  
 
 автор: АЯС   (02.01.2012 в 11:14)   письмо автору
 
   для: Владимир55   (01.01.2012 в 23:18)
 

1. После какого вашего действия "выскакивает"?

2. В каком браузере "выскакивает"?

3. Есть ли ещё подключаемые скрипты на странице, кроме "моего"? Надеюсь, вы не подключили ещё и приведённый вами скрипт от deimand'а? Или таки подключили?

  Ответить  
 
 автор: Владимир55   (02.01.2012 в 12:40)   письмо автору
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 Скриншот в приложении.

(В приницпе, всё это несущественно - система работает, а это главное!)

  Ответить  
 
 автор: Владимир55   (02.01.2012 в 12:53)   письмо автору
38.5 Кб
 
   для: Владимир55   (02.01.2012 в 12:40)
 

На всякий случай сделал скриншот из Dreamweaver (в приложении).

Но это уже просто так, из любопытства. Система работает - а это главное!

Так что ещё раз спасибо!

  Ответить  
 
 автор: АЯС   (02.01.2012 в 13:11)   письмо автору
 
   для: Владимир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"

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования