Skip to content

Instantly share code, notes, and snippets.

@BlazerYoo
Created January 19, 2022 02:55
Show Gist options
  • Save BlazerYoo/f5348e9c7535138773e7a72bb25e7930 to your computer and use it in GitHub Desktop.
Save BlazerYoo/f5348e9c7535138773e7a72bb25e7930 to your computer and use it in GitHub Desktop.
function enableContextMenu(aggressive = true) {
void(document.ondragstart=null);
void(document.onselectstart=null);
void(document.onclick=null);
void(document.onmousedown=null);
void(document.onmouseup=null);
void(document.body.oncontextmenu=null);
enableRightClickLight(document);
if (aggressive) {
enableRightClick(document);
removeContextMenuOnAll('body');
removeContextMenuOnAll('img');
removeContextMenuOnAll('td');
}
}
function removeContextMenuOnAll(tagName) {
var elements = document.getElementsByTagName(tagName);
for (var i = 0; i < elements.length; i++) {
enableRightClick(elements[i]);
enablePointerEvents(elements[i]);
}
}
function enableRightClickLight(el) {
el || (el = document);
el.addEventListener('contextmenu', bringBackDefault, true);
}
function enableRightClick(el) {
el || (el = document);
el.addEventListener('contextmenu', bringBackDefault, true);
el.addEventListener('dragstart', bringBackDefault, true);
el.addEventListener('selectstart', bringBackDefault, true);
el.addEventListener('click', bringBackDefault, true);
el.addEventListener('mousedown', bringBackDefault, true);
el.addEventListener('mouseup', bringBackDefault, true);
}
function restoreRightClick(el) {
el || (el = document);
el.removeEventListener('contextmenu', bringBackDefault, true);
el.removeEventListener('dragstart', bringBackDefault, true);
el.removeEventListener('selectstart', bringBackDefault, true);
el.removeEventListener('click', bringBackDefault, true);
el.removeEventListener('mousedown', bringBackDefault, true);
el.removeEventListener('mouseup', bringBackDefault, true);
}
function bringBackDefault(event) {
event.returnValue = true;
(typeof event.stopPropagation === 'function') && event.stopPropagation();
(typeof event.cancelBubble === 'function') && event.cancelBubble();
}
function enablePointerEvents(el) {
if (!el) return;
el.style.pointerEvents='auto';
el.style.webkitTouchCallout='default';
el.style.webkitUserSelect='auto';
el.style.MozUserSelect='auto';
el.style.msUserSelect='auto';
el.style.userSelect='auto';
enablePointerEvents(el.parentElement);
}
enableContextMenu();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment