从“上下文”菜单中禁用“粘贴”选项

时间:2010-11-10 12:06:22

标签: javascript asp.net contextmenu right-click

我有一个asp.net应用程序,我必须禁用或将其作为只读添加到上下文菜单中的粘贴选项。但我在网上搜索。我没有得到一个确切的方法。请帮我解决这个问题。提前致谢

3 个答案:

答案 0 :(得分:4)

简短的回答是你不能这样做。

用户的浏览器是他们自己的浏览器,因此他们拥有与他们想要的页面进行交互的主权。您可以捕获右键单击事件以防止菜单出现;您可以捕获按键事件以停止注册Ctrl-V(和常常忘记的Shift-Insert)。但是,您无法删除编辑 - >粘贴菜单选项,它在浏览器中工作并完全颠覆Javascript。

更不用说用户可以暂时禁用Javascript,粘贴到字段中,然后根据需要重新启用Javascript。

即使您对这些限制感到满意,也无法修改实际的上下文菜单,只能阻止右键单击注册。

答案 1 :(得分:0)

我想不可能在上下文菜单上禁用单个项目,所以我认为你应该尝试禁用整个上下文菜单,例如。

$(document).bind("contextmenu", function(e) {
    e.preventDefault();
});

答案 2 :(得分:0)

∎解决这个棘手问题的另一种方法, 使用JavaScript的面向对象特性

<div class="ro-editable">
  <span.....</...
  <pre....</...
</div>

<script>
  function make_editable_readonly(element){
    element.backup_innerHTML = element.innerHTML;   /* backup before editable. */
    element.contenteditable = "true";               /* editable. CTRL+A is usable (FUN!) */

    element.onautocomplete                          /* what in the world could change the content? actually lot!.. */
  = element.onchange 
  = element.oncontextmenu 
  = element.oncopy 
  = element.oncuechange 
  = element.oncut 
  = element.ondrag 
  = element.ondragend 
  = element.ondrop 
  = element.onemptied 
  = element.onkeyup 
  = element.onmouseup 
  = element.onpaste 
  = element.onreset = function restore(){ 
                        if (element.innerHTML !== element.backup_innerHTML) 
                          element.innerHTML = element.backup_innerHTML;
                      };
  }

  make_editable_readonly(
    document.querySelector('div.ro-editable')
  );
</script>
简单!对? (以及没有 y键事件“过滤”:):

∎这里是JSFiddle to play with

∎取自iCompile - ContentEditable And "ReadOnly"? YES! ☕