javascript - 粘贴到 contentEditable div 时如何保留 onclick
问题描述
我有一个链接和一个 contentEditable div。该链接有一个onclick
属性。当我复制链接并将其粘贴到 contentEditable div 中时,该onclick
属性已被删除。无论如何要保留 contentEditable 中的属性?
细节
片段
<html>
<head>
</head>
<body>
<a href="#" onclick="handleClick()">Click me</a>
<div
style="border: 1px solid black; min-width: 100px;"
contenteditable="true">
</div>
<script>
function handleClick() {
console.log("clicked");
}
</script>
</body>
</html>
解决方案
浏览器会为您剥离事件处理程序以防止 XSS。但是,如果您确定在粘贴的 HTML 中保留潜在危险的内容是可以的,您可以自定义onPaste
处理程序:
const editable = document.querySelector('[contenteditable]');
editable.addEventListener('paste', function(event) {
const dataTransfer = event.clipboardData;
const html = dataTransfer.getData('text/html');
document.execCommand('insertHTML', false, html);
event.preventDefault();
});
这只是一个概念证明,您还需要做很多工作才能使其在不同的浏览器中可靠地工作。
推荐阅读
- http - UWP App 在调用 await httpClient PostAsync 请求时抛出错误
- can-bus - CanOpen:是否有“紧急对象”“制造商特定错误字段”的通信配置文件?
- amazon-web-services - AWS:CDK 中的信任关系
- android - 从服务类放置应用栏。(活动除外)
- powershell - 执行 icacls 命令时出现问题
- java - 当用户导航到未知路线时,Vaadin 14 使用后备路线
- python - Python:使用for循环制作万无一失的输入法时出错
- ruby-on-rails - 通过控制台仅查看rails中与模型相关的一项数据
- angular - 发生未处理的异常:找不到模块“@angular-devkit/build-angular/package.json”需要堆栈:
- r - 用变量和年份分隔列名