简介
1.使得点击【登录复制】后可以直接复制,而不用登录。
2.设置整个页面的文本为可选中以及复制,而不用登录。
3.下载链接
元数据介绍
@name
:脚本的名称。@namespace
:脚本的命名空间或者作者的网站地址。@version
:脚本的版本号。@description
:脚本的描述,包括功能的简要说明等内容。@author
:脚本的作者。@match
:脚本要匹配的网址,如匹配CSDN博客文章详情页面。@icon
:脚本在油猴脚本管理器中显示的图标,此处为CSDN的网站图标。@license
:脚本的许可证类型,这里是MIT许可证:允许使用、修改、分发、再授权和/或销售脚本的副本,只要在所有副本中包含了原始许可证和版权声明。@thisURL
:脚本的安装页面链接,这里是脚本在Greasy Fork网站的页面链接。@downloadURL
:脚本的下载链接,这里是脚本在Greasy Fork网站的下载链接。@updateURL
:脚本的更新链接,这里是脚本在Greasy Fork网站的更新链接。
@icon:
可以放网站图标的URL地址,获取方法为:F12查看网页源代码,head标签下有个link标签,有icon标识,href处的链接就是。
@thisURL:
我自己添加的标签。
@downloadURL
和@updateURL:
无需添加,发布后Greasy Fork会自己添加。
清爽版代码
// ==UserScript==
// @name CSDN免登录复制【归忆_AC】
// @namespace https://blog.csdn.net/qq1677852098
// @version 1.2
// @description 1.使得点击【登录复制】后可以直接复制,而不用登录; 2.设置整个页面的文本为可选中以及复制。
// @author guiyi_ac
// @match https://blog.csdn.net/*/article/details/*
// @icon https://g.csdnimg.cn/static/logo/favicon32.ico
// @license MIT
// @thisURL https://greasyfork.org/zh-CN/scripts/487806-csdn%E5%85%8D%E7%99%BB%E5%BD%95%E5%A4%8D%E5%88%B6-%E5%BD%92%E5%BF%86-ac
// @downloadURL https://update.greasyfork.org/scripts/487806/CSDN%E5%85%8D%E7%99%BB%E5%BD%95%E5%A4%8D%E5%88%B6%E3%80%90%E5%BD%92%E5%BF%86_AC%E3%80%91.user.js
// @updateURL https://update.greasyfork.org/scripts/487806/CSDN%E5%85%8D%E7%99%BB%E5%BD%95%E5%A4%8D%E5%88%B6%E3%80%90%E5%BD%92%E5%BF%86_AC%E3%80%91.meta.js
// ==/UserScript==
(function() {
'use strict';
var elements = document.getElementsByTagName('pre');
for (var i = 0; i < elements.length; i++) {
var element = elements[i];
element.innerHTML = element.innerHTML.replace(/signin/g, 'copyCode');
}
window.oncontextmenu = document.oncontextmenu = document.oncopy = null;
var bodies = document.querySelectorAll('body');
bodies.forEach(function(body) {
var displayStyle = body.style.display;
body.style.display = 'none';
void body.offsetWidth;
body.style.display = displayStyle;
});
[...document.querySelectorAll('body, body *')].forEach(dom => {
['onselect', 'onselectstart', 'onselectend', 'ondragstart', 'ondragend', 'oncontextmenu', 'oncopy'].forEach(ev => dom.removeAttribute(ev));
dom.style['user-select'] = 'auto';
});
})();
详细版代码
// ==UserScript==
// @name CSDN免登录复制【归忆_AC】
// @namespace https://blog.csdn.net/qq1677852098
// @version 1.1
// @description 1.使得点击【登录复制】后可以直接复制,而不用登录; 2.设置整个页面的文本为可选中以及复制。
// @author guiyi_ac
// @match https://blog.csdn.net/*/article/details/*
// @icon https://g.csdnimg.cn/static/logo/favicon32.ico
// @license MIT
// @thisURL https://greasyfork.org/zh-CN/scripts/487806-csdn%E5%85%8D%E7%99%BB%E5%BD%95%E5%A4%8D%E5%88%B6-%E5%BD%92%E5%BF%86-ac
// @downloadURL https://update.greasyfork.org/scripts/487806/CSDN%E5%85%8D%E7%99%BB%E5%BD%95%E5%A4%8D%E5%88%B6%E3%80%90%E5%BD%92%E5%BF%86_AC%E3%80%91.user.js
// @updateURL https://update.greasyfork.org/scripts/487806/CSDN%E5%85%8D%E7%99%BB%E5%BD%95%E5%A4%8D%E5%88%B6%E3%80%90%E5%BD%92%E5%BF%86_AC%E3%80%91.meta.js
// ==/UserScript==
//1.使得点击【登录复制】后可以直接复制,而不用登录------------------------------------------------------------
// 获取所有代码块的元素
var elements = document.getElementsByTagName('pre');
// 遍历所有元素
for (var i = 0; i < elements.length; i++) {
// 获取当前元素
var element = elements[i];
// 替换所有的signin为copyCode,/g代表替换所有的signin
element.innerHTML = element.innerHTML.replace(/signin/g, 'copyCode');
}
//2.将整个页面设置为可编辑状态,可以自由地增删改--------------------------------------------------------------
//开启后会导致有的链接点击后无法跳转!!!
/*
//获取整个文档
let doc = document.querySelectorAll('*');
doc.forEach(c => {
c.contentEditable = true; //设置文档为可编辑
})
*/
//3.设置整个页面的文本为可选中以及复制-----------------------------------------------------------------------
//取消了在窗口和文档级别上对右键菜单和复制操作的事件监听。通过将它们设置为 null,使得在网页中右键菜单和复制操作不再受到限制。
window.oncontextmenu = document.oncontextmenu = document.oncopy = null;
//首先获取所有 <body> 元素,然后使用 forEach 循环遍历每个 <body> 元素,并将其 outerHTML 属性重新赋值为其当前值。
//这样做可以强制重新渲染页面,以便取消任何可能存在的事件监听或样式更改。
//这样子强制渲染会出错!!!!!比如使得点击事件失效。
// document.querySelectorAll('body').forEach(dom => dom.outerHTML = dom.outerHTML);
// 获取所有 body 元素
var bodies = document.querySelectorAll('body');
// 遍历每个 body 元素
bodies.forEach(function (body) {
// 保存当前 body 元素的 display 样式
var displayStyle = body.style.display;
// 修改 body 元素的 display 样式为 'none'
body.style.display = 'none';
// 强制重新渲染元素
void body.offsetWidth;
// 将 display 样式恢复到原始值,触发重新渲染
body.style.display = displayStyle;
});
//获取页面中所有的 <body> 元素及其所有子元素,并使用 forEach 循环遍历每个元素。
document.querySelectorAll('body, body *').forEach(dom => {
//遍历每个元素时,这里移除了一系列事件属性,包括选择事件、拖拽事件、右键菜单事件和复制事件。
//通过调用 removeAttribute() 方法,将这些事件属性移除,以确保不会受到任何事件监听的限制。
['onselect', 'onselectstart', 'onselectend', 'ondragstart', 'ondragend', 'oncontextmenu', 'oncopy'].forEach(ev => dom.removeAttribute(ev));
//将 user-select 样式属性设置为 'auto',以允许用户在页面中进行文本选择操作。
//通常情况下,网页开发者会使用 CSS 来控制用户是否可以选择文本,通过将 user-select 设置为 'auto',使得用户可以自由地选择文本。
dom.style['user-select'] = 'auto';
});
(by 归忆)