Overriding Webview2 context menu along with default one

Viewed 368
1 Answers

That's actually easy, when you have the code from that link.

The contextmenu event derives from MouseEvent, so it has information about the control keys being pressed.

Simply replace the javascript contextmenu handler to:

document.addEventListener('contextmenu', function (event)
{
    if (!event.ctrlKey && !event.shiftKey)
    {
        let jsonObject =
        {
            Key: 'contextmenu',
            Value:
            {
                X: event.screenX,
                Y: event.screenY
            }
        };
        window.chrome.webview.postMessage(jsonObject);
        event.preventDefault();
    }
});

It works so that if a control key is pressed, it does absolutely nothing, which will show the default menu. If no keys are pressed, it sends the coordinates to C# and calls event.preventDefault();.

Note: In the code from that link, I call:

webView21.CoreWebView2.Settings.AreDefaultContextMenusEnabled = false;

Here, you should NOT call that. Instead call event.preventDefault(); in javascript.

Related