Autoriser uniquement le menu contextuel Copier / Coller dans le contrôle System.Windows.Forms.WebBrowser
-
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:
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!
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>
Autres conseils
//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:
J'espère que cela vous aidera, Anderson Imes
Si vous les désactivez, l'utilisateur peut toujours copier & amp; coller en utilisant les raccourcis clavier (Ctrl-C, Ctrl-V). Peut-être que cela vous donne les fonctionnalités dont vous avez besoin.
Nous avons fini par utiliser une combinaison des deux commentaires ci-dessus. Plus près de la seconde, c'est pourquoi je lui ai rendu hommage.
Il existe un moyen de remplacer le menu contextuel à la fois dans le code Web côté client et dans les formulaires Win, ce qui correspond à l'approche que nous avons adoptée. Je ne voulais vraiment pas réécrire le menu contextuel, mais cela semble nous avoir donné la bonne combinaison de contrôle.