上下文菜单由浏览器管理,浏览器决定是否在其中添加复制(以及剪切和粘贴)命令。只有在用户选择上打开上下文菜单时才会发生这种情况。
您可以为事件添加一个侦听器contextmenu
,您可以取消它,因此您可以创建自定义上下文菜单 - 这非常酷,但是如果没有 Flash 等一些花哨的技术的帮助,您将无法访问剪贴板。
不过,您可以使用一个(肮脏的)技巧。但<textarea>
无论如何,诀窍都是诀窍。像这样设计它:
textarea {
position: absolute;
margin: 0;
padding: 0;
border: 0 none;
opacity: 0;
}
现在您可以为事件添加事件侦听器contextmenu
:
var textarea = document.getElementsByTagName("TEXTAREA")[0];
document.addEventListener("contextmenu", function(e) {
textarea.style.zIndex = 10000; // must be high enough
textarea.style.left = e.pageX + "px";
textarea.style.top = e.pageY + "px";
textarea.setSelectionRange(0, textarea.value.length);
setTimeout(function() {
textarea.style.zIndex = -10000; // must be low enough
}, 10);
});
您在这里要做的是将 textarea 放在光标正下方并选择其全部内容,以便光标实际上位于所选内容上。
textarea 必须位于所有其他元素之上,因此您必须将其z-index
style 属性设置为较高的值。但是,您不希望页面上漂浮“幽灵”,这可能会阻止预期的鼠标行为,因此您在将其推到所有其他元素后面后立即(因此是setTimeout
)。
在那里,您在上下文菜单上有一个工作副本。
我只在 Chrome 上测试过,抱歉。我猜应该可以在其他浏览器上工作,你只需要测试。不适用于 IE8 及更低版本(使用而不是,并且有完全不同的方式来选择文本 - 检查出来),绝对不能在 IE8 中工作(如果您设置事件侦听器,它总是会阻止上下文菜单出现 - 必须使用事件并检查右键单击)。attachEvent
addEventListener
contextmenu
mousedown
警告:根据用户单击的位置,文本区域可能会超出底部和右侧页面边界,从而导致出现页面滚动条。您可以尝试将 textarea 的大小调整为 1px 宽和高,并设置overflow: hidden
.
好吧,这个答案对我自己也很有帮助。希望你会喜欢它。
编辑:现场测试