我正在修改一个现有脚本来生成一个HTML文件。脚本在超链接下放置位置(系统路径)。但当我试图从html文件中复制它时,我得到了额外的"https://"在文本的前面
作为例子,我看到这打印在。html文件
<td> ERROR massage. Please find the log <a href="/home/user/log">here</a> </td>
但是当我右键点击->从chrome复制链接地址,我得到这个:https://home/user/log
我不是一个web开发人员,所以不知道我是否使用正确的标签来完成工作。那么,我怎样才能得到我需要的文本呢?
感谢可能是一个非常牵强的解决方案,但如果你想复制到剪贴板的锚元素的href属性的确切值,不管页面是从哪里加载的任何uri模式,忽略前面的事实,可能这样的url应该被编码为file://
,因为它显然是一个文件系统路径,
可以采用的策略是让一个事件触发覆盖的出现,该覆盖将在整个文档的顶部显示这些信息,并期望单击关闭按钮返回到以前的状态。
问题在于以编程方式更改剪贴板数据是相当危险的,因为涉及到的安全规则依赖于太多我们想在这里忽略的条件。
因此,如果你对这种策略感兴趣,你所需要做的就是在你的文档末尾的<script>
标签内添加这段代码(只要js将被允许在你的页面中运行)。
在这里,你必须按住CTRL键,同时点击链接,和一个覆盖将显示来自点击链接的href属性的确切值。这样你就可以自己在剪贴板上复制了。当然,在按住CTRL键之前,你必须把焦点放在文档上。
let ctrlKeyPressed = false;
document.querySelectorAll('a')
.forEach(anchor => {
anchor.addEventListener('click', e => {
if(ctrlKeyPressed){
e.preventDefault();
const overlay = document.createElement('div');
overlay.classList.add('overlay');
const container = document.createElement('div');
const urlSpan = document.createElement('span');
urlSpan.innerText = e.target.getAttribute('href');
container.appendChild(urlSpan);
container.innerHTML += '<br>';
const close = document.createElement('a');
close.innerText = 'close';
close.href = "#";
container.appendChild(close);
close.addEventListener('click', event=>{
event.target.closest('.overlay').remove();
});
overlay.appendChild(container);
document.body.appendChild(overlay);
}
});
});
document.addEventListener('keydown', e => {
if (e.ctrlKey && !ctrlKeyPressed){
ctrlKeyPressed = true;
console.log('holding ctrl key');
}
});
document.addEventListener('keyup', e => {
if (ctrlKeyPressed){
ctrlKeyPressed = false;
console.log('left ctrl key');
}
});
.overlay{
position: fixed;
display: flex;
justify-content: center;
left:0;
top:0;
width: 100%;
height: 100%;
z-index: 1;
border: solid black;
background: white;
font-size: 30px;
align-items: center;
}
.overlay > div {
text-align: center;
}
<td> ERROR massage. Please find the log <a href="/home/user/log">here</a> </td>