【HTML】-解决页面内容无法选择、复制问题

目录

1、网页内容无法选中

1.1、问题原因

1.2、解决脚本

1.2.1、开启控制台窗口

1.2.2、执行脚本命令

2、内容复制弹出阻止框

2.2、解决脚本


1、网页内容无法选中

1.1、问题原因

今天在访问某一网站平台,需要将内容进行选择、复制时发现不可使用。

在使用【Simple Allow Copy】 插件,仍无法启用(插件自身在其他平台可以使用)

经过发现是由于页面的CSS样式中存在以下两种属性导致,移除即可。

webkit-user-select: none;

user-select: none;

1.2、解决脚本

1.2.1、开启控制台窗口

按下【F12】 或【Fn + F12】开启控制台窗口,或者在更多工具中找到【开发者工具】

选择Console 页签

1.2.2、执行脚本命令

将以下脚本命令复制到控制台窗口,按下【Enter键】即可

复制代码
 // 遍历所有样式表
    for (var i = 0; i < document.styleSheets.length; i++) {
        var styleSheet = document.styleSheets[i];

        // 尝试访问样式表的规则(处理跨域问题)
        try {
            var rules = styleSheet.cssRules || styleSheet.rules;

            // 遍历样式表中的每条规则
            for (var j = rules.length - 1; j >= 0; j--) {
                var rule = rules[j];

                // 检查规则是否包含 user-select: none 或 -webkit-user-select: none
                if (rule.style && (rule.style.userSelect === 'none' || rule.style.webkitUserSelect === 'none')) {
                    // 移除规则
                    styleSheet.deleteRule(j);
                }
            }
        } catch (e) {
            console.log(`Cannot access stylesheet: ${styleSheet.href}, due to ${e}`);
        }
    }

代码解释

  1. 遍历所有的样式表 document.styleSheets
  2. 尝试访问每个样式表中的规则(如果样式表来自跨域资源,可能会遇到访问限制)。
  3. 遍历每个样式表中的每条规则。
  4. 检查规则是否包含 user-select: none-webkit-user-select: none 样式。
  5. 如果找到匹配的规则,则从样式表中移除该规则。

将此代码放入你的HTML文件中的 <script> 标签内,确保它在页面加载完成后执行。这样就可以全局查找并移除 CSS 样式中的指定规则。

2、内容复制弹出阻止框

将内容复制后,自动弹出选项框,并进一步要求开通会员等。

2.2、解决脚本

脚本的操作与【1.2】中一致,开启控制台窗口,输入脚本,按键盘Enter键执行即可。

可以在【某度文库】中试试

复制代码
// 移除所有阻止内容复制和选中的事件监听器
    var eventsToRemove = ['selectstart', 'copy', 'contextmenu', 'mousedown', 'mouseup', 'dragstart'];

    // 为元素移除事件监听器
    function removeEventListeners(element) {
        eventsToRemove.forEach(function(event) {
            element.addEventListener(event, function(e) {
                e.stopPropagation();
            }, true);
        });
    }

    // 获取页面上的所有元素
    var allElements = document.querySelectorAll('*');
    allElements.forEach(function(element) {
        removeEventListeners(element);
    });

    // 移除 user-select 和 -webkit-user-select 样式
    for (var i = 0; i < document.styleSheets.length; i++) {
        var styleSheet = document.styleSheets[i];

        // 尝试访问样式表的规则(处理跨域问题)
        try {
            var rules = styleSheet.cssRules || styleSheet.rules;

            // 遍历样式表中的每条规则
            for (var j = rules.length - 1; j >= 0; j--) {
                var rule = rules[j];

                // 检查规则是否包含 user-select: none 或 -webkit-user-select: none
                if (rule.style && (rule.style.userSelect === 'none' || rule.style.webkitUserSelect === 'none')) {
                    // 移除规则
                    styleSheet.deleteRule(j);
                }
            }
        } catch (e) {
            console.log(`Cannot access stylesheet: ${styleSheet.href}, due to ${e}`);
        }
    }

    // 移除所有内联的 user-select 样式
    allElements.forEach(function(element) {
        if (element.style.userSelect === 'none') {
            element.style.userSelect = '';
        }
        if (element.style.webkitUserSelect === 'none') {
            element.style.webkitUserSelect = '';
        }
    });

代码解释

  1. 移除事件监听器:

    • 定义 removeEventListeners 函数,使用 addEventListener 给元素添加新的事件监听器,并使用 stopPropagation 阻止事件冒泡,以便移除事件监听器的效果。
    • 遍历页面上的所有元素,调用 removeEventListeners 函数。
  2. 处理样式表:

    • 遍历所有的样式表 document.styleSheets
    • 尝试访问每个样式表中的规则(处理跨域问题)。
    • 检查每条规则是否包含 user-select: none-webkit-user-select: none 样式,并移除匹配的规则。
  3. 移除内联样式:

    • 获取页面上的所有元素,并遍历它们。
    • 移除元素上设置的内联 user-select: none-webkit-user-select: none 样式。

通过这种方式,可以确保页面上的内容可以被正常选中和复制,并恢复默认行为。

注:以上代码提供的内容仅用于个人学习、研究或欣赏。但是不保证内容的全部正确性。通过使用本站内容随之而来的风险与本站无关。

相关推荐
xhxxx18 小时前
别再被 CSS 定位搞晕了!5 种 position 一图打尽 + 实战代码全公开
前端·css·html
询问QQ6882388620 小时前
基于偏最小二乘算法(PLS)的多输出数据回归预测
html
挫折常伴左右1 天前
初见HTML
前端·html
一水鉴天2 天前
整体设计 定稿 之24 dashboard.html 增加三层次动态记录体系仪表盘 之2 程序 (Q208 之1)
前端·html
一水鉴天2 天前
整体设计 定稿 之22 dashboard.html 增加三层次动态记录体系仪表盘 之1
前端·html
沟通QQ8762239652 天前
有限元仿真模型仿真模型-基于COMSOL多物理场耦合仿真的变压器流固耦合及振动噪声分析 1、变...
html
江公望2 天前
HTML5 History 模式 5分钟讲清楚
前端·html·html5
A24207349302 天前
使用jQuery动态操作HTML和CSS
css·html·jquery
carry杰3 天前
nacos bootstrap.yml 动态配置开发测试线上模式
前端·bootstrap·html
€绘梨衣3 天前
笔墨屋12.12题目及解析
html