Skip to content

Instantly share code, notes, and snippets.

@richard512
Created July 7, 2017 01:55
Show Gist options
  • Save richard512/accd9b489c655bf159fcd9be9e099b7f to your computer and use it in GitHub Desktop.
Save richard512/accd9b489c655bf159fcd9be9e099b7f to your computer and use it in GitHub Desktop.
re-enable right click (bookmarklet)
javascript:(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){}}})(window);
@cusco
Copy link

cusco commented May 14, 2025

javascript: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