javascript - 如何防止剪贴板回车变成换行
问题描述
我正在为教育目的编写加密算法,并且我需要能够复制/粘贴 unicode 字符。
问题是剪贴板(不仅是api)将回车符(十六进制:0x0d,十进制:13)修改为换行符(十六进制:0x0a,十进制:10)。
我怎样才能防止这种行为?
let $ = s => document.querySelector(s);
let cr = String.fromCharCode(0x0d);
$("#one").addEventListener("click", function (e)
{
navigator.clipboard.writeText(cr);
});
$("#two").addEventListener("change", function (e)
{
$("#out").textContent = "0x" + this.value.charCodeAt(0).toString(16).padStart(2, 0);
});
<button id="one">copy cr to clipboard</button><br>
<textarea type="text" id="two"></textarea><br>
<div id="out"></div>
您可以通过单击按钮将回车保存到剪贴板中,然后将其粘贴到 textarea 中来测试它。然后在文本区域外单击以触发更改事件。它将显示 0x0a,因为剪贴板已将 cr 转换为 lf。
PS:我不得不从引导模式转到传统模式,因为它很麻烦,真的很烦人
解决方案
它与剪贴板无关:
const $ = s => document.querySelector(s);
const cr = String.fromCharCode(0x0d);
const firstCharAsHex = v => "0x" + v.charCodeAt(0).toString(16).padStart(2, 0);
$("#one").addEventListener("click", async function (e) {
navigator.clipboard.writeText(cr);
const v = await navigator.clipboard.readText();
console.log("Written: " + firstCharAsHex(v));
});
$("#two").addEventListener("paste", function (e) {
const v = e.clipboardData.getData('text/plain');
console.log("Being paste: " + firstCharAsHex(v));
});
$("#two").addEventListener("change", function (e) {
const v = this.value
console.log("After paste: " + firstCharAsHex(v));
});
<button id="one">Run</button><br>
<textarea type="text" id="two"></textarea><br>
Textarea 标准化CR
为LF
. 见规格:
由于历史原因,元素的值以三种不同的方式归一化,用于三种不同的目的。
推荐阅读
- .net - 简单 React 组件的无效元素类型错误
- css - 如何将绝对元素悬停在相对元素中?
- kotlin - Kotlin 脚本引擎抛出“未解析的引用”,即使包和类是有效的
- mysql - 别名 CASE 语句
- javascript - 如何添加基于时间的弹出成功/失败消息?
- sql - Oracle 根据 Order By 更新前 20 条记录
- asterisk - Asterisk ARI - 在振铃前将通道传递给 Stasis
- matplotlib - mplot3d:在 `plot_surface()` 下隐藏线图`plot()`
- c# - 创建 nuget 包时访问消费者应用程序配置
- scala - 测试 sparksql 查询