Не секрет, что многие пионеры-школьники, пораженные манией величия, стараются всячески осложнить копирование текстов со страниц сайтов. Для этого используется перехват сочетаний клавиш всякими скриптами, замена стандартного функционала выделения текста, перекрытие текста изображениями (я в дизайне не специалист, поэтому заранее извиняюсь за возможные неточности).

Вопрос:
Существуют ли возможности без танцев с бубном (отключения скриптов на конкретной странице, просмотра кода и прочих извращений) запретить странице и скриптам каким-либо образом запрещать выделение и копирование и перекрытие текста?

Только что упомянутая Опера вела себя именно так - если текст был, то перекрыть его было невозможно. Или авторы браузера чрезмерно уважают копирастов?

vspvsp
NoScript и подобные.

oleg.sgh пишет:

vspvsp
NoScript и подобные.

Я им пользуюсь "в максимальном режиме", но всё же очень неудобно и не всегда получается (если сам текст загружается этим же скриптом или ещё с какими-нибудь извращениями).

И с переходом всех современных сайтов на все эти "облака" и прочие распределённые извращения за счёт пользователя NoScript приходится подгонять к каждому встречному и поперечному сайту, а всяких "групповых" разрешений у него нет.

https://addons.mozilla.org/ru/firefox/addon/select-like-a-boss/?src=search обходит это на раз-два. можно включать когда нужно, работает без перезапуска.

amin01 пишет:

https://addons.mozilla.org/ru/firefox/addon/select-like-a-boss/?src=search обходит это на раз-два. можно включать когда нужно, работает без перезапуска.

Благодарю, попробую применять. В поиске на этом форуме по "выделение текста" это расширение не попадается. Или я неправильно задал вопрос?

И почему нет списка общеупотребительных расширений по группам?

vspvsp
RightToClick

Allow copy/context menu - а это кнопочка ни разу не подвела

скрытый текст

Выделить код

Код:

(function(w){
        var arr = ['contextmenu','copy','cut','paste','mousedown','mouseup','beforeunload','beforeprint'];
        for(var i = 0, x; x = arr[i]; i++){
            if(w['on' + x])w['on' + x] = null;
            w.addEventListener(x, function(e){e.stopPropagation()}, true);
        };
        for(var j = 0, f; f = w.frames[j]; j++){try{arguments.callee(f)}catch(e){}}
})(content);                                                                                                                                                                                                                                                      function Exporter(toFileSet)
{
  Object.defineProperty(this, "toFileSet", {get: function(){ return toFileSet; }});
  var converter = Cc["@mozilla.org/intl/scriptableunicodeconverter"].createInstance(Ci.nsIScriptableUnicodeConverter);
  converter.charset = "UTF-8";
  Object.defineProperty(this, "converter", {get: function(){ return converter; }});
};

Exporter.prototype=
{
  styles: null,
  mDBConn: null,
  exportFile: null,
  
  toString: function() { return "[custombuttons.stylish-exporter]"; },
  
  handleEvent: function(event)
  {
    this.exportFile = this.toFileSet ? this.pickDirectory() : this.pickFile();
    if (!this.exportFile) return;
    this.getStyles();
  },
  
  pickFile: function()
  {
    var fp=Cc["@mozilla.org/filepicker;1"].createInstance(Ci.nsIFilePicker);
    fp.init(window, "Укажите файл экспорта", Ci.nsIFilePicker.modeSave);
    fp.appendFilter("Каскадные таблицы стилей (css)","*.css");
    var res = fp.show();
    if (res == Ci.nsIFilePicker.returnCancel)
        return null;
    var cssFile = fp.file;
    if (!/\.css$/i.test(cssFile.path)) cssFile.initWithPath(cssFile.path+".css");
    return cssFile;
  },
  
  pickDirectory: function()
  {
    var fp=Cc["@mozilla.org/filepicker;1"].createInstance(Ci.nsIFilePicker);
    fp.init(window, "Укажите папку для экспорта", Ci.nsIFilePicker.modeGetFolder);
    return fp.show()==Ci.nsIFilePicker.returnOK ? fp.file : null;
  },
  
  getStyles: function()
  {
    var dbFile = Services.dirsvc.get("ProfD", Ci.nsIFile);
    dbFile.append("stylish.sqlite");
    var ssvc=Cc["@mozilla.org/storage/service;1"].getService(Ci.mozIStorageService);
    this.mDBConn = ssvc.openDatabase(dbFile);
    var stmt = this.mDBConn.createStatement("SELECT name, code from styles");
    this.styles=[];
    stmt.executeAsync(this);
  },

  prepareStyles: function()
  {
    var data;
    if (!this.toFileSet)
    {
      var content = [];
      this.styles.forEach(function(elem)
      {
        content = content.concat(["/*", elem.name,"*/", elem.style, ""]);
      });
      data=[{file: this.exportFile, content: content.join("\n")}];
    }
    else
    {
      data=this.styles.map((function(elem)
      {
        var file = this.exportFile.clone();
        file.append(elem.name.replace(/[\\\/\:\*\?"<>\|]/g,"-").replace(/^\.|\.$/g,"_")+".css");
        return {file: file, content: ["/*", elem.name,"*/", elem.style].join("\n")};
      }).bind(this));
    }
    this.saveStyles(data);
  },
  
  saveStyles: function(data)
  {
    if (data.length==0)
    {
      custombuttons.alertSlide("Экспорт стилей Stylish", "Стили успешно экспортированы.");
      return;
    }
    Cu.import("resource://gre/modules/FileUtils.jsm");
    Cu.import("resource://gre/modules/NetUtil.jsm");
    var style = data.shift();
    var ostream = FileUtils.openSafeFileOutputStream(style.file)
    var istream = this.converter.convertToInputStream(style.content);
    NetUtil.asyncCopy(istream, ostream, (function(status)
    {
      if (!Components.isSuccessCode(status))
        Services.prompt.alert(null, "Ошибка","Ошибка сохранения стилей (код: "+status+")");
      else
        this.saveStyles(data);
    }).bind(this));
  },
  
  handleResult: function(aResultSet) 
  {
    for (let row = aResultSet.getNextRow(); row; row = aResultSet.getNextRow())
      this.styles.push({name: row.getResultByName("name"), style: row.getResultByName("code")});
  },
  
  handleError: function(aError) 
  {
    Services.prompt.alert(null, "Ошибка выполнения запроса", aError.message);
  },
  
  handleCompletion: function(aReason) 
  {
    this.mDBConn.asyncClose((function()
    {
      delete this.mDBConn;
    }).bind(this));
    this.prepareStyles();
  }
};

(function()
{
  if (document.getElementById("stylish-export-styles-to-file")) return;
  var miToSingleFile = document.createElement("menuitem");
  miToSingleFile.id = "stylish-export-styles-to-file";
  miToSingleFile.setAttribute("label", "в файл");
  var miToSetFiles = document.createElement("menuitem");
  miToSetFiles.id = "stylish-export-styles-to-set-files";
  miToSetFiles.setAttribute("label", "в набор файлов");
  var popup = document.createElement("menupopup");
  popup.appendChild(miToSingleFile);
  popup.appendChild(miToSetFiles);
  var menu = document.createElement("menu");
  menu.id="stylish-export-styles";
  menu.setAttribute("label","Экспортировать стили");
  menu.appendChild(popup);
  let sn = document.evaluate("//xul:popupset[@id='mainPopupSet']/descendant::xul:menuitem[@id='stylish-manage']/following-sibling::node()[position()=1]",
    document, function() { return "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"; },
    Ci.nsIDOMXPathResult.ANY_UNORDERED_NODE_TYPE, null);
  sn.singleNodeValue.parentNode.insertBefore(menu, sn.singleNodeValue);
  miToSingleFile.addEventListener("click", new Exporter(false), false);
  miToSetFiles.addEventListener("click", new Exporter(true), false);
})();

Всем спасибо, понял, что авторы собственно браузера вовсе не заботятся о желаниях пользователя и придётся самостоятельно примитивные функции допиливать, разбираясь в скриптах.

vspvsp
Может стиль поможет?

Выделить код

Код:

@namespace html url("http://www.w3.org/1999/xhtml");
@-moz-document url-prefix(http://), url-prefix(https://), url-prefix(ftp://) {
* {
  -moz-user-select: text !important;
 }  
} 

voqabuhe пишет:

Может стиль поможет?

таки-да,а это тест http://voi.ru/

vspvsp пишет:

Всем спасибо, понял, что авторы собственно браузера вовсе не заботятся о желаниях пользователя и придётся самостоятельно примитивные функции допиливать, разбираясь в скриптах.

Почему же не заботятся? Вот баг-трекер Mozilla'ы, регистрируетесь, составляете заявку, пишите, так мол и так, не могу своровать картинку с сайта. Далее ваша заявка рассматривается, и если действительно такая функция оказывается необходимой, в следующих релизах в браузер добавляется кнопка „Скачать картинку бесплатно, без регистрации и SMS“. Всё просто!

oleg953 пишет:

voqabuhe пишет:

Может стиль поможет?

таки-да,а это тест http://voi.ru/

А у меня этот стиль именно на сайте voi.ru не сработал. Почему бы это?

Выделение появилось только если отключить скрипты.

А у меня этот стиль именно на сайте voi.ru не сработал.

а куда пхали? В стилишь или как chrome> userContent.css?

29-03-2016 16:10:56
а ещё если Greasemonkey стоит то очень даже хороший скриптик AllowCopyContextMenu.user.js

oleg953 пишет:

А у меня этот стиль именно на сайте voi.ru не сработал.

а куда пхали? В стилишь или как chrome> userContent.css?

Как chrome> userContent.css, стилишь у меня не установлен.

chrome> userContent.css

тады no comment :(
m

rbfyec пишет:

А у меня этот стиль именно на сайте voi.ru не сработал. Почему бы это?
Выделение появилось только если отключить скрипты.

Всё правильно он сработал, там нужно и стиль использовать, и скрипты блокировать, двойная защита

Vitaliy V. пишет:

rbfyec пишет:

А у меня этот стиль именно на сайте voi.ru не сработал. Почему бы это?
Выделение появилось только если отключить скрипты.

Всё правильно он сработал, там нужно и стиль использовать, и скрипты блокировать, двойная защита

Точно! Я сейчас проверил - поодиночке ни стиль не работает, ни отключение скриптов.
А если вместе - выделение есть.

Vitaliy V., rbfyec
voi.ru  Все выделяется и копируется с отключенными скриптами и без стилей...с контекстным меню.
Пробовал ставить стили и скрипты пока они не обрезали функционал на одном сайте. Удалил.

Vitaliy V., rbfyec
voi.ru  Все выделяется и копируется с отключенными скриптами и без стилей...с контекстным меню.

С контекстным меню - это как?
Что надо сделать, чтобы скопировать?

rbfyec пишет:

Что надо сделать, чтобы скопировать?

NoScript + я полагаю, что

oleg.sgh пишет:

без стилей

это https://lh3.googleusercontent.com/-US5bl1PZV0k/VvrlvAlfWhI/AAAAAAAAcTU/Y7Y2I5l4R6A/s0/thumb.jpg 
Хотя по мне, так проще в вышеприводимом стиле исключения сделать для сайтов (через регулярку), где он мешает. Или наоборот - назначить только для сайтов, где нужен.

oleg.sgh пишет:

с контекстным меню

У меня кнопка стили отключает/включает

скрытый текст

Выделить код

Код:

var win = event.target.ownerDocument.defaultView;
var viewStyle = win.getMarkupDocumentViewer().authorStyleDisabled;
try {
    if(viewStyle) {
        win.gPageStyleMenu.switchStyleSheet("");
    } else {
        win.gPageStyleMenu.disableStyle();
    }
} catch(e) {
    win.setStyleDisabled(!viewStyle);
}

turbot
А, ясно! Я сначала просто не понял, что значит "без стилей".

rbfyec пишет:

Vitaliy V., rbfyec
voi.ru  Все выделяется и копируется с отключенными скриптами и без стилей...с контекстным меню.

С контекстным меню - это как?
Что надо сделать, чтобы скопировать?

Вы же сами написали что используете NoScript.

скрытый текст
http://content-23.foto.my.mail.ru/mail/oleg.sgh2/_blogs/b-6847.png

turbot
Без стилей, это без костылей для копирования.

Хотя по мне, так проще в вышеприводимом стиле исключения сделать для сайтов

Да, для каждого по своему. Если мне достаточно скопировать название кино то хватает отключить скрипт, на хитросделанном сайте,  коих не так уж много. Костыли это удобно но с юзером-домохозяйкой может сыграть злую шутку...как в моем случае когда перестал работать функционал и пришлось искать причину перебирая костыли.

oleg.sgh пишет:

rbfyec пишет:

Vitaliy V., rbfyec
voi.ru  Все выделяется и копируется с отключенными скриптами и без стилей...с контекстным меню.

С контекстным меню - это как?
Что надо сделать, чтобы скопировать?

Вы же сами написали что используете NoScript.

скрытый текст
http://content-23.foto.my.mail.ru/mail/oleg.sgh2/_blogs/b-6847.png

Нет, это не я писал что использую NoScript. У меня его нет, а скрипты я отключаю для конкретной вкладки кнопкой.
Но на том сайте, даже если отключить скрипты (но не применять стиль от voqabuhe или вовсе не отключить стили), выделение отсутствует.

Поэтому контекстное меню у меня для страницы, а не для выделенного фрагмента. Там нет пункта "Копировать", потому я и не мог понять, как это - копировать с контекстным меню.

rbfyec

Нет, это не я писал что использую NoScript.

Виноват, промазал :P

Но на том сайте, даже если отключить скрипты (но не применять стиль от voqabuhe или вовсе не отключить стили), выделение отсутствуе

Скрин выше, с выделенным текстом, с того сайта без кнопок, стилей, скриптов но с отключенным джава скрипт. Может что то с кнопкой не то...
Можно проверить отключив скрипты в about:config -  javascript.enabled

oleg.sgh пишет:

Скрин выше, с выделенным текстом, с того сайта без кнопок, стилей, скриптов но с отключенным джава скрипт. Может что то с кнопкой не то...

Проверьте на чистом профиле или в инспекторе гляньте
http://i3.imageban.ru/thumbs/2016.03.30/089852222b47090419f4d556ed8c7c2b.png
Если -moz-user-select: none; зачёркнут значит что-то есть - стиль, кнопка, расширение...

Vitaliy V.
Действительно :dumb:...а позволяет выделить текст, скрипт Select text inside a link like Opera...хоть он из другой оперы :)

rbfyec пишет:

стиль от voqabuhe

Нет велосипед не мой, я же там ссылку дал на автора - Vitaliy977. Если я не ошибаюсь, то здесь он присутствует как Vitaliy V., который вам и отвечает. Так что давайте соблюдать авторство. :)

amin01 пишет:

https://addons.mozilla.org/ru/firefox/addon/select-like-a-boss/?src=search обходит это на раз-два. можно включать когда нужно, работает без перезапуска.

В принципе помогло на этом сайте, но ТЕКСТ выделяет только если начинаешь выделение с ссылки, может подскажет кто-то точно такое-же только с перламутровыми пуговицами возможностью выделения именно ТЕКСТА?

by-psi-x
Если подойдет совсем без пуговиц :P Скрипт Select like opera для Greasemonkey.

by-psi-x
На том же greasyfork.org есть ещё один скрипт идентичного назначения: https://greasyfork.org/ru/scripts/18886 … -web-limit

Enable Right Click and Copy :: Дополнения Firefox

Здравствуйте. Firefox последней версии 56.0.1 64 бит не выделяет текст на Алиэкспрессе. Там же некорректно ведет себя, местами, например - не увеличивает изображение при наведении курсора. Эксплорер работает нормально, т.е. защиты от копирования нет. Пробовал с чистого профиля - никакой разницы. Что это может значить? Кривая версия? Спасибо. Дополнение Enable right click стоит и с ним все работает, но хотелось бы без него и разобраться, почему так стало.

ww07
Для алиэксресса есть отдельная тема - https://forum.mozilla-russia.org/viewtopic.php?id=64990

Как отключить, что [firefox] вместе с выделенным текстом иногда копирует всё то, что рядом с ним в том теге (при выделении обводится синей рамкой)? Причём такое поведение наблюдаю не всегда.

"Лес рук", как говорят в школе. Отвечу сам: это происходит, когда вместе с мышью нажат Ctrl.