Brave doesn't prevent websites from providing their own context menu via an event-handler on the contextmenu
event. For example, the following interactive demo will work inside Brave without issue:
const menu = document.querySelector("#menu");
document.addEventListener("click", (event) => {
menu.classList.remove("on");
});
document.addEventListener("contextmenu", (event) => {
event.preventDefault();
menu.style.top = `${event.clientY}px`;
menu.style.left = `${event.clientX}px`;
menu.classList.add("on");
});
#menu {
position: fixed;
opacity: 0;
background: white;
padding: 0.5em 1em;
box-shadow: 0.5em 0.5em 2em rgba(0, 0, 0, 0.25);
transition: opacity 0.25s linear;
}
#menu.on {
opacity: 1;
transition: none;
}
<p>Right-click anywhere in this area.</p>
<div id="menu">
<p>This is a custom context menu.</p>
</div>
Brave does block some scripts from executing in some contexts. If Brave suspects a particular script on a page could be harmful, then it will prevent that script from being loaded, or it may change the behavior of the script in some other manner.
It's likely you have encountered a site which hosts its custom context menu script on a third-party URL, a pattern that may be interpreted by Brave as potentially harmful. To confirm this, click the Brave icon to the right of your address bar and check to see if any scripts were blocked.