Many websites disable text selection, the context menu, or keyboard shortcuts to prevent accidental copying or to customize the user experience. While these restrictions may serve a purpose, they can also interfere with legitimate activities such as taking notes, using translation tools, or accessing browser features.
This article demonstrates a simple JavaScript snippet that restores standard browser interactions by removing common client-side restrictions.
What This Script Does
The script performs several actions:
Re-enables text selection.
Restores the browser's right-click context menu.
Removes a common popup element if it exists.
Removes fixed-position overlays that may block page interaction.
Prevents page scripts from intercepting common mouse and clipboard events.
Because the script runs entirely in your browser, it only affects the current page during the current browsing session.
JavaScript Code
(() => {
// Enable text selection
const style = document.createElement("style" );
style.textContent = `
* {
user-select: text !important;
-webkit-user-select: text !important;
-moz-user-select: text !important;
pointer-events: auto !important;
}
`;
document.head.appendChild( style);
// Remove popup
document.querySelector("# notRemoverPopup")?.remove();
// Remove fixed overlays
document.querySelectorAll("[ style*='z-index'], .modal, .overlay").forEach(el => {
if (getComputedStyle(el).position === "fixed") {
el.remove();
}
});
// Restore context menu and clipboard events
["contextmenu","copy","cut"," paste","selectstart"," mousedown","mouseup"," dragstart"].forEach(evt => {
window.addEventListener(evt, e => e.stopImmediatePropagation(), true);
});
console.log("Restrictions removed.");
})();
How It Works
Restores Text Selection
The script injects CSS rules that override restrictions such as:
user-select: none-webkit-user-select: none
This allows text to be highlighted again.
Removes a Popup
Some websites display a popup with the ID:
#notRemoverPopup
The script removes it from the page if it is present.
Removes Fixed Overlays
Many websites display fullscreen overlays using CSS such as:
position: fixed;
z-index: 9999;
The script searches for common overlay elements and removes them if they use fixed positioning.
Restores Browser Events
Websites sometimes intercept events like:
contextmenu
copy
cut
paste
selectstart
mousedown
mouseup
dragstart
The script stops these interception handlers from taking priority, allowing the browser's default behavior to work normally in many cases.
How to Run the Script
Open the desired webpage.
Press F12 to open Developer Tools.
Select the Console tab.
Paste the JavaScript code.
Press Enter.
The changes apply only to the current page and disappear after a refresh.
Limitations
This technique only affects client-side JavaScript and CSS. It does not bypass server-side protections, authentication, or access controls. Some websites may also reload or recreate interface elements dynamically, requiring the script to be run again.
For developers, students, and power users, browser-side JavaScript can be a useful way to inspect how a page behaves and to restore standard browser functionality during debugging or testing. Understanding how event listeners, CSS properties, and DOM manipulation work is also a great way to learn more about modern web development.
If you frequently use this type of script, consider turning it into a userscript with extensions such as Tampermonkey so it can run automatically on pages where you have permission to use it.
(() => {
"use strict";
function hidePopup() {
const popup = document.getElementById("
if (popup) {
popup.remove(); // oppure: popup.style.display = "none";
}
}
function enableRightClick() {
document.oncontextmenu = null;
document.onmousedown = null;
document.onmouseup = null;
document.onclick = null;
document.addEventListener("
e.stopImmediatePropagation();
}, true);
document.addEventListener("
if (e.button === 2) {
e.stopImmediatePropagation();
}
}, true);
document.querySelectorAll("*")
el.oncontextmenu = null;
el.onmousedown = null;
el.onmouseup = null;
el.onclick = null;
});
}
hidePopup();
enableRightClick();
new MutationObserver(() => {
hidePopup();
}).observe(document.body, {
childList: true,
subtree: true
});
console.log("Popup off.");
})();