解决网页无法复制文字的问题-(非插件、非禁用javascript)

目的:

想必我们都遇到过在网页上复制自己想要的内容,并不容易,有的需要关注公众号、或者需要登录注册一个账号、有的甚至还要付钱才让复制,今天就来解决这种问题。

无法复制原因:

要解决网页文字不能复制的问题,先要了解,到底是怎么限制了我们进行复制

首先,我们可以把复制、剪切看作事件,由js控制,而事件如果阻止了默认事件的发生,那么就会令这个事件失去了原来的效果,大致代码如下:

//复制
document.addEventListener('copy', (event) => {
    //event.clipboardData.setData("text/plain", "往剪切板写入其他内容");
    //阻止默认事件
    event.preventDefault();
    //....(这里就可以写其他逻辑,例如:弹窗登录、弹窗付钱、弹窗关注公众号等等)
});

//剪切
document.addEventListener('cut', (event) => {
    //event.clipboardData.setData("text/plain", "往剪切板写入其他内容");
    //阻止默认事件
    event.preventDefault();
    //....(这里就可以写其他逻辑,例如:弹窗登录、弹窗付钱、弹窗关注公众号等等)
});

 加了上面这两个事件监听后,就会监听复制和剪切并阻止其原本的功能(可以监听但不限于:ctrl+c,ducument.execCommand,鼠标右击(复制、剪切))

解决复制:

最终通过文档认识到了一个专门操作剪切板的api(Clipboard API),咱不需要细讲这个东西,他有一些方法(就是读写剪切板的方法),咱们可以用其中一个方法解决不能复制的问题(writeText)

navigator.clipboard.writeText("写入到剪切板的内容");

方法的限制:

1.需要保证你要复制的网站必须是https

2.需要和网页有交互

3.如果有权限访问,需要选择允许 

因为,这个方法只是往剪切板里面写入内容,并非复制功能,所以不会被上面的事件进行监听

如果我们能够再获取到选中的文本,把选中的文本通过这个方法写入剪切板那么就相当于完成了复制

 无法选中文本的原因:

随即问题出现,有些网站他不仅仅限制了对文字的复制,还限制了对文字的选择 

分析后发现大部分是利用css样式进行了禁止文字选择,css样式如下:

p{
    user-select: none;
}

解决选中文本:

 这个就简单了,我们只需要把样式覆盖就好,给标签加上行级样式即可:

<p style="user-select: text;">阻止用户选中文本(无法选中)</p>

获取选中的文本:

window.getSelection().toString();

最后总结-以及方法:

最后就非常简单了,我们只需要把前面说的东西整合一下,就可以做到在网页上任意复制了,整合解决代码如下:

(function () {
    function setAllSelect(el = document.body) {
        for (let index = 0; index < el.children.length; index++) {
            const e = el.children.item(index);
            e.style.userSelect = 'text';
            setAllSelect(e);
        }
    }
    setAllSelect();
    document.documentElement.addEventListener('mouseup', e => {
        const pasteText = window.getSelection().toString();
        if (null === pasteText || undefined === pasteText || '' === pasteText.trim()) {
            return;
        }
        navigator.clipboard.writeText(pasteText).then(() => {
            alert("复制成功!");
        }).catch(() => {
            alert("复制失败!");
        });
    });
})();

现在只需要复制上面的代码,粘贴到浏览器的控制台

控制台所在位置,快捷键:(f12或者fn+f12):

回车后就可以解决网页不能复制的问题 ,重要:此时复制的方法就不是ctrl+c或则鼠标右击复制了,而是用鼠标选中要复制的文字,然后松开鼠标,就成功复制了,无需ctrl+c!无需ctrl+c!无需ctrl+c!

演示动态图:

问题:

1.如果网站不是https(现在网站大部分都是https)使用这种方法是不行的,可以选择插件或者禁用javascript(可以的话)

2.如果弹出权限询问框,选择允许,(其实拒绝也只会影响这一次,下一次依然能复制成功),如下图:

说明: 

技术不分好坏,相信你看完这篇文章不仅可以解决网页文字复制的问题,还可以学会给自己的网站加入更强的防复制的技术。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
增加了在特定站点禁用JavaScript的能力。 简介此Web扩展使用户可以确定是否应为给定主机或给定选项卡启用或禁用JavaScript。 功能-设置默认状态(JS开或JS关)-设置禁用行为(按域或按选项卡)-使用快捷方式(也可以禁用此功能)-使用上下文菜单项进行切换(也可以禁用此功能) -查看您列入黑名单/列入白名单的域列表-访问网站之前手动添加域-添加自动为子域启用/禁用JS的基本域用法当访问例如google.com并禁用JavaScript时,网络扩展会阻止所有JavaScript,否则将会阻止所有JavaScript由google.com(包括其他主机的内联JS和外部JS文件)加载。 请注意,如果将已列入黑名单的主机中的脚本加载到另一个主机中(当然,除您也阻止了该主机)。 支持的浏览器-Mozilla Firefox(台式机和Firefox for Android)-Google Chrome(台式机)为什么使用此Web扩展代码是完全开源的,如果您愿意,也可以使用此Web扩展的解压缩版本。 不会记录您的任何数据,并且Web扩展程序仅询问其真正需要的权限。 拉请求是欢迎的! 未来计划您可以在项目GitHub页面上查看现有的计划并添加新的功能建议(您可以在Web扩展的About页面中找到链接)。 支持如果您需要任何帮助或发现任何错误,请随时通过电子邮件直接与我联系,或者使用Web扩展程序的chrome网上商店页面中的支持表格。 支持语言:English

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值