Наш чат в Telegram для обмена идеями, проектами, мыслями, людьми в сфере ИТ г.Ростова-на-Дону: @it_rostov

Защита от копирования содержимого страницы

Защита от копирования текста страницы

Защитить от выделения и копирования текста страницы можно с помощью следующего кода:

<script type="text/javascript">
    document.ondragstart = test;
    //запрет на перетаскивание
    document.onselectstart = test;
    //запрет на выделение элементов страницы
    document.oncontextmenu = test;
    //запрет на выведение контекстного меню
    function test() {
        return false
    }
</script>

Такая защита НЕ спасет от:

  • выделения всей страницы с помощью комбинации клавиш Ctrl + A,
  • просмотра исходного текста с помощью комбинации клавиш Ctrl + U,
  • сохранения всей страницы на диск с помощью комбинации клавиш Ctrl + S.

Дочитайте до конца и узнаете, почему на данной странице ни одна из этих комбинаций не работает.

Защита от копирования отдельных элементов страницы

Если необходимо защитить исключительно картинки, то можно обойтись следующим кодом:

<img src="image.jpg" oncontextmenu="return false;" ondragstart="return false">

Если нужно защитить от выделения отдельный блок, то воспользуйтесь таким кодом:

<div id="noselect">
    Этот блок нельзя выделить
</div>

<script type="text/javascript">
    function disableSelection(target){
        if (typeof target.onselectstart!="undefined")
            target.onselectstart=function(){return false}
        else if (typeof target.style.MozUserSelect!="undefined")
            target.style.MozUserSelect="none"
        else
            target.onmousedown=function(){return false}
        target.style.cursor = "default"
    }
    if (document.getElementById("noselect")) disableSelection(document.getElementById("noselect"));
</script>

Защита от копирования всей страницы

Текст и картинка на данной странице защищены от выделения и копирования. Проверьте!

Конечно, не секрет, что и такую защиту можно обойти через просмотр исходного кода защищенной страницы средствами браузера.

Элемент защищен от копирования

Исходный код этого примера:
<script>
// запрет правой кнопки мышки
    document.onmousedown = function (e) {
        e = e || window.event;
        var b = (e.which ? (e.which < 2) : (e.button < 2));
        if (!b)return false;
    };
    document.oncontextmenu = function (e) {
        return false
    };

// запрет выделения мышкой и комбинаций клавиш Ctrl + A, Ctrl + U и Ctrl + S
    function preventSelection(e) {
        var preventSelection = false;

        function addHandler(e, event, handler) {
            if (e.attachEvent) e.attachEvent('on' + event, handler);
            else if (e.addEventListener) e.addEventListener(event, handler, false);
        }

        function removeSelection() {
            if (window.getSelection) {
                window.getSelection().removeAllRanges();
            }
            else if (document.selection && document.selection.clear)
                document.selection.clear();
        }

// запрещаем выделять текст мышкой
        addHandler(e, 'mousemove', function () {
            if (preventSelection) removeSelection();
        });
        addHandler(e, 'mousedown', function (e) {
            e = e || window.event;
            var sender = e.target || e.srcElement;
            preventSelection = !sender.tagName.match(/INPUT|TEXTAREA/i);
        });

// запрещаем нажатие клавищ Ctrl + A, Ctrl + U и Ctrl + S
        function killCtrlA(e) {
            e = e || window.e;
            var sender = e.target || e.srcElement;
            if (sender.tagName.match(/INPUT|TEXTAREA/i)) return;
            var key = e.keyCode || e.which;
            if ((e.ctrlKey && key == 'U'.charCodeAt(0)) || (e.ctrlKey && key == 'A'.charCodeAt(0)) || (e.ctrlKey && key == 'S'.charCodeAt(0)))  // 'A'.charCodeAt(0) можно заменить на 65
            {
                removeSelection();
                if (e.preventDefault) e.preventDefault();
                else e.returnValue = false;
            }
        }

        addHandler(e, 'keydown', killCtrlA);
        addHandler(e, 'keyup', killCtrlA);
    }
    preventSelection(document);
</script>

Таким образом, вы запретите выделение во всем документе, кроме элементов INPUT и TEXTAREA.

Комментарии

Выделении текста двойным кликом:

  1. Google Chrome и FireFox выделяют слово, и можно успеть нажать Ctrl+C.
  2. Opera и Microsoft Edge не дают запретить поведение по умолчанию. Они выделяет слово и вызывают контекстное меню.

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


Смотрите также:

Блокировка правой кнопки мыши

Как запретить пользователю выделять текст в браузере


.