Не секрет, что многие пионеры-школьники, пораженные манией величия, стараются всячески осложнить копирование текстов со страниц сайтов. Для этого используется перехват сочетаний клавиш всякими скриптами, замена стандартного функционала выделения текста, перекрытие текста изображениями (я в дизайне не специалист, поэтому заранее извиняюсь за возможные неточности).
Вопрос:
Существуют ли возможности без танцев с бубном (отключения скриптов на конкретной странице, просмотра кода и прочих извращений) запретить странице и скриптам каким-либо образом запрещать выделение и копирование и перекрытие текста?
Только что упомянутая Опера вела себя именно так - если текст был, то перекрыть его было невозможно. Или авторы браузера чрезмерно уважают копирастов?
Отсутствует
vspvsp
NoScript и подобные.
Я им пользуюсь "в максимальном режиме", но всё же очень неудобно и не всегда получается (если сам текст загружается этим же скриптом или ещё с какими-нибудь извращениями).
И с переходом всех современных сайтов на все эти "облака" и прочие распределённые извращения за счёт пользователя NoScript приходится подгонять к каждому встречному и поперечному сайту, а всяких "групповых" разрешений у него нет.
Отсутствует
https://addons.mozilla.org/ru/firefox/addon/select-like-a-boss/?src=search обходит это на раз-два. можно включать когда нужно, работает без перезапуска.
Благодарю, попробую применять. В поиске на этом форуме по "выделение текста" это расширение не попадается. Или я неправильно задал вопрос?
И почему нет списка общеупотребительных расширений по группам?
Отсутствует
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; } }
Отсутствует
Всем спасибо, понял, что авторы собственно браузера вовсе не заботятся о желаниях пользователя и придётся самостоятельно примитивные функции допиливать, разбираясь в скриптах.
Почему же не заботятся? Вот баг-трекер Mozilla'ы, регистрируетесь, составляете заявку, пишите, так мол и так, не могу своровать картинку с сайта. Далее ваша заявка рассматривается, и если действительно такая функция оказывается необходимой, в следующих релизах в браузер добавляется кнопка „Скачать картинку бесплатно, без регистрации и SMS“. Всё просто!
Отсутствует
voqabuhe пишетМожет стиль поможет?
таки-да,а это тест http://voi.ru/
А у меня этот стиль именно на сайте voi.ru не сработал. Почему бы это?
Выделение появилось только если отключить скрипты.
Отсутствует
А у меня этот стиль именно на сайте voi.ru не сработал.
а куда пхали? В стилишь или как chrome> userContent.css?
Добавлено 29-03-2016 16:10:56
а ещё если Greasemonkey стоит то очень даже хороший скриптик AllowCopyContextMenu.user.js
Отредактировано oleg953 (29-03-2016 16:10:56)
Отсутствует
А у меня этот стиль именно на сайте voi.ru не сработал.
а куда пхали? В стилишь или как chrome> userContent.css?
Как chrome> userContent.css, стилишь у меня не установлен.
Отсутствует
А у меня этот стиль именно на сайте voi.ru не сработал. Почему бы это?
Выделение появилось только если отключить скрипты.
Всё правильно он сработал, там нужно и стиль использовать, и скрипты блокировать, двойная защита
Отсутствует
rbfyec пишетА у меня этот стиль именно на сайте voi.ru не сработал. Почему бы это?
Выделение появилось только если отключить скрипты.Всё правильно он сработал, там нужно и стиль использовать, и скрипты блокировать, двойная защита
Точно! Я сейчас проверил - поодиночке ни стиль не работает, ни отключение скриптов.
А если вместе - выделение есть.
Отсутствует
Vitaliy V., rbfyec
voi.ru Все выделяется и копируется с отключенными скриптами и без стилей...с контекстным меню.
Пробовал ставить стили и скрипты пока они не обрезали функционал на одном сайте. Удалил.
Отредактировано oleg.sgh (29-03-2016 22:56:24)
Отсутствует
Vitaliy V., rbfyec
voi.ru Все выделяется и копируется с отключенными скриптами и без стилей...с контекстным меню.
С контекстным меню - это как?
Что надо сделать, чтобы скопировать?
Отредактировано rbfyec (29-03-2016 23:23:24)
Отсутствует
Отсутствует
с контекстным меню
У меня кнопка стили отключает/включает
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); }
Отредактировано Vitaliy V. (30-03-2016 00:00:22)
Отсутствует
Vitaliy V., rbfyec
voi.ru Все выделяется и копируется с отключенными скриптами и без стилей...с контекстным меню.С контекстным меню - это как?
Что надо сделать, чтобы скопировать?
Вы же сами написали что используете NoScript.
Хотя по мне, так проще в вышеприводимом стиле исключения сделать для сайтов
Да, для каждого по своему. Если мне достаточно скопировать название кино то хватает отключить скрипт, на хитросделанном сайте, коих не так уж много. Костыли это удобно но с юзером-домохозяйкой может сыграть злую шутку...как в моем случае когда перестал работать функционал и пришлось искать причину перебирая костыли.
Отсутствует
rbfyec пишетVitaliy V., rbfyec
voi.ru Все выделяется и копируется с отключенными скриптами и без стилей...с контекстным меню.С контекстным меню - это как?
Что надо сделать, чтобы скопировать?Вы же сами написали что используете NoScript.
скрытый текст
Нет, это не я писал что использую NoScript. У меня его нет, а скрипты я отключаю для конкретной вкладки кнопкой.
Но на том сайте, даже если отключить скрипты (но не применять стиль от voqabuhe или вовсе не отключить стили), выделение отсутствует.
Поэтому контекстное меню у меня для страницы, а не для выделенного фрагмента. Там нет пункта "Копировать", потому я и не мог понять, как это - копировать с контекстным меню.
Отсутствует
rbfyec
Нет, это не я писал что использую NoScript.
Виноват, промазал
Но на том сайте, даже если отключить скрипты (но не применять стиль от voqabuhe или вовсе не отключить стили), выделение отсутствуе
Скрин выше, с выделенным текстом, с того сайта без кнопок, стилей, скриптов но с отключенным джава скрипт. Может что то с кнопкой не то...
Можно проверить отключив скрипты в about:config - javascript.enabled
Отредактировано oleg.sgh (30-03-2016 12:47:03)
Отсутствует