网页开发中,实现复制功能是一项常见的需求。本文将介绍如何使用JavaScript实现网页上的复制功能,为您揭秘这一实用技巧。
首先,在HTML文件中创建一个按钮,并设置一个唯一的id,用于后续的处理。
<button id="copyButton">复制文本</button>
接着,在JavaScript中编写复制函数,该函数将实现复制功能。
document.getElementById("copyButton").addEventListener("click", function() {
// 希望复制的文本内容
var text = "要复制的文本内容";
// 创建一个元素
var input = document.createElement("input");
input.setAttribute("value", text);
// 将元素追加到页面中
document.body.appendChild(input);
// 选中元素中的文本内容
input.select();
// 执行复制操作
document.execCommand("copy");
// 移除元素
document.body.removeChild(input);
// 显示复制成功提示
alert("复制成功!");
});
我们尝试运行程度,然后点击一下复制按钮;
运行结果:
至此,我们已完成了JavaScript实现网页复制功能的所有步骤。
在实际运用中,您可以根据需要对复制功能进行改进,例如添加复制成功的提示、处理异常情况等。通过掌握这一技巧,您可以为用户提供更好的交互体验。
请在合适的时机将代码部署到实际环境中进行测试。
确保在使用execCommand("copy")方法时,浏览器拦截器或插件不会阻止复制操作。
部分移动设备浏览器可能不支持execCommand方法,因此请根据实际情况进行兼容性处理。
时候,在网页上看到感兴趣的文件想复制里面的内容,却复制不了!今天小编跟大家分享一个代码,用它就可以复制你想复制的内容,方便吧~
想在网页中复制一些内容,却被告知不能复制或需要登录注册什么的才可以复制!其实,用一个代码就可以解决这个问题~
步骤:删除原来的网址,输入代码,javascript:void($={});
注意:一定要手动输入,复制是无效的。
输完代码,就可以开始把你想复制的内容复制下来啦,是不是很方便呢~
PS:需要将文件转换成其他格式,可通过迅捷PDF转换器进行转换。
明:文章内容仅用于学习交流,切勿不当使用。
上网的时候经常会遇到网页禁止复制文本或者禁止文档下载的情况。今天结合案例分析下实现这些限制的手法和解除办法。
首先创建一个demo.html的文档,文档内容如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>DEMO</title>
<style>
body {background-color: aqua;}
</style>
</head>
<body>
<div class="content">测试文本测试文本测试文本</div>
<script>
let htmlEle = document.documentElement;
let bodyEle = document.querySelector('body');
htmlEle.addEventListener('selectstart', (e) => {
e.preventDefault();
});
bodyEle.addEventListener('copy', (e) => {
e.preventDefault();
});
bodyEle.addEventListener('selectstart', (e) => {
e.preventDefault();
});
bodyEle.addEventListener('contextmenu', (e) => {
e.preventDefault();
});
</script>
</body>
</html>
打开文档可以发现,页面文本是无法选择并复制的。因为如代码所示,页面元素被绑定了几个事件(选择、拷贝、右键菜单),阻止了用户对文本的复制企图。
怎么办呢?
打开浏览器的开发者工具,切换到Elements标签下,选择文本元素,这时可以在下方的“事件监听器”中查看到目标元素及其祖先元素上绑定的事件。展开这些相关的事件,可以看到“移除”按钮,接下来只需点击按钮将这些限制事件移除便可以复制了。
上述办法是在事件绑定后,再将它们移除。此外,也可以通过抓包改包的方式移除绑定事件相关的代码,从源头阻止事件的绑定。这需要抓包工具的辅助,这里用到的是Fiddler。
假设网页部署在本地服务器上,首先,打开Fiddler,在右侧切换到“自动转发”面板(带闪电图标的),勾选图中两个选项;然后添加规则,填上要更改的请求地址以及要替换的本地文件(假设为demo1文件,内容如下),填好后保存。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>DEMO</title>
<style>
body {background-color: #dedede;}
</style>
</head>
<body>
<div class="content">测试文本测试文本测试文本</div>
</body>
</html>
设置好以后再次刷新网页,会发现页面的背景色发生了变化,而且文本也可以直接复制了。
此处以网上的一个文档为例,文档可以在线查看,但是无法直接下载。通过开发者工具选中文档,可以看到它对应了一个img标签(以前是canvas),我们可以将图片保存到本地,但是如果页面比较多,手动操作就很麻烦,所以可以用代码帮我们自动执行,将图片合并成pdf文件并下载到本地。
以下代码可做参考:
function loadScript (url) {
let ele = document.createElement('script')
ele.src = url
document.body.appendChild(ele)
}
function img2dataUrl (options) {
let result = ''
let img = options.img || ''
let width = options.width || img.naturalWidth || img.clientWidth
let height = options.height || img.naturalHeight || img.clientHeight
let quality = options.quality || 100
let mimeType = options.mimeType || 'image/png'
let canvas = document.createElement('canvas')
canvas.width = width
canvas.height = height
let ctx = canvas.getContext('2d')
ctx.drawImage(img, 0, 0, img.naturalWidth, img.naturalHeight, 0, 0, width, height)
result = canvas.toDataURL(mimeType, quality / 100)
return result
}
loadScript('https://cdn.bootcdn.net/ajax/libs/jspdf/2.5.1/jspdf.umd.min.js')
function img2pdf () {
let imgArr = [...document.querySelectorAll('.reader_inner img')]
if (imgArr.length === 0) return
let doc = new jspdf.jsPDF({unit:'px'});
imgArr.forEach((v,i) => {
v.setAttribute("crossOrigin",'anonymous');
let pxPermm = v.width / 210 / 2.2;
let imgData = img2dataUrl({img:v}).slice('data:image/png;base64,'.length);
(i > 0) && doc.addPage();
doc.addImage(imgData, 'png', 0, 0, v.width / pxPermm, v.height / pxPermm);
})
doc.save('img2pdf.pdf');
}
将代码放到控制台或者代码段中执行,执行后,再在控制台调用 img2pdf() 方法即可将可浏览的页面合并成PDF下载到本地。
*请认真填写需求信息,我们会在24小时内与您取得联系。