Erlauben Sie nur Kopieren / Einfügen Kontextmenü in System.Windows.Forms.WebBrowser Steuerung

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

  •  03-07-2019
  •  | 
  •  

Frage

Das WebBrowser-Steuerelement hat eine Eigenschaft namens „IsWebBrowserContextMenuEnabled“, die alle Fähigkeit, deaktiviert der rechten Maustaste auf eine Webseite und ein Kontextmenü sehen. Das ist ganz in der Nähe, was ich will (ich will nicht, dass jemand in der Lage sein Rechtsklick und Druck, schlug zurück, traf Eigenschaften, Quelltext anzeigen, etc).

Das einzige Problem ist dies auch über das Kontextmenü deaktiviert, die in Textfeldern für Kopieren / Einfügen erscheint, etc.

dies deutlicher zu machen, ist das, was ich nicht will:
badcontext

Dies ist, was ich will:
goodcontext

Ich mag das Hauptkontextmenü deaktivieren, aber die es erlaube, die in Textfeldern angezeigt. Wer weiß, wie ich das tun würde? Die WebBrowser.Document.ContextMenuShowing Ereignis sieht vielversprechend aus, aber scheint nicht richtig, das Element zu identifizieren, wird der Benutzer einen Rechtsklick auf, entweder durch die HtmlElementEventArgs Parameters „fromelement“ und „toElement“ Eigenschaften, noch ist der Sender alles andere als der Htmldocument Element.

Vielen Dank im Voraus!

War es hilfreich?

Lösung

haben Sie darüber nachgedacht, Ihr eigenes Kontextmenü in Javascript zu schreiben? Hören Sie einfach den Benutzer direkt auf dem Körper zu klicken, dann zeigen Sie Ihr Menü mit Kopieren und Einfügen-Befehlen (Hinweis: element.style.display = „block | none“). So kopieren, führen Sie den folgenden Code ein:

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

Und einzufügen:

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

Quelle:

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

. HINWEIS: Dies funktioniert nur im Internet Explorer (die für Ihre Anwendung in Ordnung ist)

Ich weiß, es ist nicht mit irgendwelchen Mitteln in beschuss, aber hier ist ein Codebeispiel, das bekommen sollten Sie begonnen:

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

Andere Tipps

//Start:

function cutomizedcontextmenu(e)
{
    var target = window.event ? window.event.srcElement : e ? e.target : null;
    if( navigator.userAgent.toLowerCase().indexOf("msie") != -1 )
    {
        if (target.type != "text" && target.type != "textarea" && target.type != "password") 
        {
            alert(message);
            return false;
        }
    return true;
    }
    else if( navigator.product == "Gecko" )
    {
        alert(message);
        return false;
    }
} 

document.oncontextmenu = cutomizedcontextmenu;
//End:

Ich hoffe, dies wird Ihnen helfen, Anderson Imes

Ein kurzer Blick auf die MSDN-Dokumentation zeigt, dass keine der Mausereignisse (klicken, Button down / up usw.) wird unterstützt in Ihrem Programm verwendet werden. Ich habe Angst, seine entweder oder: Entweder deaktivieren conetxt Menüs oder sie ermöglichen.

Wenn Sie sie deaktivieren, kann der Benutzer immer noch kopieren und einfügen Tastenkombinationen (Strg-C, Strg-V). das gibt Ihnen vielleicht die Funktionalität, die Sie benötigen.

mit einer Kombination aus beiden obigen Kommentare

Wir landeten. Näher an der zweiten, weshalb ich ihm Kredit gegeben hat.

Es gibt einen Weg, um das Kontextmenü auf dem Client-Seite Web-Code sowie durch WinForms zu ersetzen, die der Ansatz ist, dass wir nahmen. Ich wollte wirklich nicht das Kontextmenü neu zu schreiben, aber dies scheint uns die richtige Mischung aus Kontrolle gegeben zu haben.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top