Хотя каждый элемент может получить событие paste , это событие всегда будет игнорироваться (как при отсутствии поведения по умолчанию), за исключением случаев, когда элементом является либо <input>
, <textarea>
, либорежим contentEditable .
Так что, хотя в их контекстном меню нет никаких указаний относительно того, что браузер должен показывать, фактом является то, что большинство из них не показывают «Вставить» там, где оно будетвсе равно проигнорируйте.
Таким образом, чтобы получить его на <div>
, вам нужно установить атрибут contentEditable
в значение true.
Если вы не хотите его всегда,Вы можете взломать что-нибудь в событии mousedown :
target.onmousedown = e => {
if (e.button === 2) target.contentEditable = true;
// wait just enough for 'contextmenu' to fire
setTimeout(() => target.contentEditable = false, 20);
};
target.onpaste = e => {
e.preventDefault();
console.log('got paste data:', e.clipboardData.getData('text'));
};
<div id="target">right click me</div>