Tries to ensure Ctrl+A (Select All) and Ctrl+C (Copy) functionality on displayspecifications.com.
// ==UserScript==
// @name Ensure Ctrl+A & Ctrl+C on DisplaySpecifications
// @namespace http://tampermonkey.net/
// @version 0.2
// @description Tries to ensure Ctrl+A (Select All) and Ctrl+C (Copy) functionality on displayspecifications.com.
// @author Your Name
// @match https://www.displayspecifications.com/*
// @license MIT
// @grant GM_addStyle
// @run-at document-start
// ==/UserScript==
(function() {
'use strict';
// 1. Принудительно разрешить выделение текста через CSS
// Это самая мягкая и часто эффективная мера.
GM_addStyle(`
body, body *, ::selection {
user-select: text !important;
-webkit-user-select: text !important;
-moz-user-select: text !important;
-ms-user-select: text !important;
}
`);
// Функция для обнуления потенциально блокирующих обработчиков
function clearEventHandlersOnElement(element, eventName) {
if (!element) return;
try {
if (typeof element[eventName] === 'function') {
console.log(`[UserScript] Clearing ${eventName} on`, element.tagName || element.constructor.name);
element[eventName] = null;
}
} catch (e) {
// console.warn(`[UserScript] Failed to clear ${eventName} on ${element.tagName || element.constructor.name}:`, e);
}
}
// 2. Обнулить некоторые специфические обработчики, которые могут мешать.
// Делаем это после загрузки основного контента DOM, чтобы убедиться, что body существует.
document.addEventListener('DOMContentLoaded', function() {
// Для onselectstart и oncopy обычно достаточно document и document.body
clearEventHandlersOnElement(document, 'onselectstart');
clearEventHandlersOnElement(document.body, 'onselectstart');
clearEventHandlersOnElement(document, 'oncopy');
clearEventHandlersOnElement(document.body, 'oncopy');
// Иногда onmousedown может мешать выделению, но на этом сайте вроде бы не проблема.
// clearEventHandlersOnElement(document, 'onmousedown');
// clearEventHandlersOnElement(document.body, 'onmousedown');
});
// 3. Более агрессивный перехват keydown (опционально, и для этого сайта, скорее всего, не нужен)
// Если вышеперечисленное не помогает (что маловероятно для displayspecifications.com),
// можно раскомментировать этот блок.
/*
const keydownInterceptor = function(event) {
const isCtrlA = event.ctrlKey && (event.key === 'a' || event.key === 'A' || event.keyCode === 65);
const isCtrlC = event.ctrlKey && (event.key === 'c' || event.key === 'C' || event.keyCode === 67);
if (isCtrlA || isCtrlC) {
// Мы пытаемся остановить другие обработчики на этом же элементе
// от отмены стандартного действия.
if (event.isTrusted) { // Только если событие создано браузером
console.log(`[UserScript] ${isCtrlA ? 'Ctrl+A' : 'Ctrl+C'} detected. Attempting to stop immediate propagation.`);
event.stopImmediatePropagation();
}
// Не вызываем preventDefault(), чтобы стандартное действие сработало.
}
};
// Используем capture фазу, чтобы сработать раньше
window.addEventListener('keydown', keydownInterceptor, true);
*/
console.log('[UserScript] "Ensure Ctrl+A & Ctrl+C on DisplaySpecifications" activated.');
})();