Autoriser uniquement le menu contextuel Copier / Coller dans le contrôle System.Windows.Forms.WebBrowser

StackOverflow https://stackoverflow.com/questions/200162

  •  03-07-2019
  •  | 
  •  

Question

Le contrôle WebBrowser a une propriété appelée "IsWebBrowserContextMenuEnabled " qui désactive toute possibilité de cliquer avec le bouton droit sur une page Web et d'afficher un menu contextuel. C’est très proche de ce que je veux (je ne veux pas que quiconque puisse cliquer avec le bouton droit de la souris et imprimer, frapper en arrière, cliquer sur les propriétés, afficher le code source, etc.).

Le seul problème est que cela désactive également le menu contextuel qui apparaît dans les zones de texte pour copier / coller, etc.

Pour que cela soit plus clair, voici ce que je ne veux pas:
 badcontext

Voici ce que je veux:
 goodcontext

Je voudrais désactiver le menu contextuel principal, mais autoriser celui qui apparaît dans les zones de texte. Quelqu'un sait comment je ferais ça? L'événement WebBrowser.Document.ContextMenuShowing semble prometteur, mais ne semble pas identifier correctement l'élément sur lequel l'utilisateur clique avec le bouton droit de la souris, soit via le paramètre HtmlElementEventArgs du paramètre "FromElement". et " ToElement " propriétés, l'expéditeur n'est rien d'autre que l'élément HtmlDocument.

Merci d'avance!

Était-ce utile?

La solution

avez-vous envisagé d'écrire votre propre menu contextuel en javascript? Il suffit d’écouter l’utilisateur en cliquant avec le bouton droit de la souris sur le corps, puis d’afficher votre menu avec les commandes copier-coller (indice: element.style.display = "block | none"). Pour copier, exécutez le code suivant:

   CopiedTxt = document.selection.createRange();
   CopiedTxt.execCommand("Copy");

Et pour coller:

   CopiedTxt = document.selection.createRange();
   CopiedTxt.execCommand("Paste");

Source:

http://www.geekpedia.com /tutorial126_Clipboard-cut-copy-and-paste-with-JavaScript.html

REMARQUE: cela ne fonctionne que dans IE (ce qui convient à votre application).

Je sais que ce n'est pas du tout pareil, mais voici un exemple de code qui devrait vous aider à démarrer:

<html>
    <head>
        <script type = "text/javascript">
            var lastForm = null;
            window.onload = function(){

                var menu = document.getElementById("ContextMenu");
                var cpy = document.getElementById("CopyBtn");
                var pst = document.getElementById("PasteBtn");

                document.body.onmouseup = function(){
                    if (event.button == 2)
                    {
                        menu.style.left = event.clientX + "px";
                        menu.style.top = event.clientY + "px";
                        menu.style.display = "block";

                        return true;
                    }

                    menu.style.display = "none";
                };

                cpy.onclick = function(){
                    copy = document.selection.createRange();
                    copy.execCommand("Copy");
                    return false;
                };

                pst.onclick = function(){
                    if (lastForm)
                    {
                        copy = lastForm.createTextRange();
                        copy.execCommand("Paste");
                    }
                    return false;
                };
            };
        </script>
    </head>

    <body oncontextmenu = "return false;">
        <div id = "ContextMenu" style = "display : none; background: #fff; border: 1px solid #aaa; position: absolute;
            width : 75px;">
            <a href = "#" id = "CopyBtn" style = "display: block; color : blue; text-decoration: none;">Copy</a>
            <a href = "#" id = "PasteBtn" style = "display: block; color : blue; text-decoration: none;">Paste</a>
        </div>
        sadgjghdskjghksghkds
        <input type = "text" onfocus = "lastForm = this;" />
    </body>
</html>
scroll top