Life
万物皆可覆盖 - js
声明
本篇基于 TamperMonkey 脚本实现
故事的开始
作为一个白嫖党,在用csdn上面复制东西的时候,发现必须得登录,才能复制,妥妥的心里不开心,于是开始了攻防,研究后发现是通过 css 来限制复制的,于是便写了第一版的脚本
// 移除限制复制功能
if($("#content_views pre")[0])
{
$("#content_views pre").attr("style","user-select:auto");
}
// 移除限制复制功能
if ($("#content_views pre code")[0])
{
$("#content_views pre code").attr("style","user-select:auto");
}
// remove 登录后复制
if ($(".hljs-button.signin")[0])
{
$(".hljs-button.signin").attr("style", "display:none");
}
如此便快活了好一阵子,后来有一天发现有些文章需要关注后才能查看,否则内容就给盖住,当然 开发者工具里面还是能看到的,总不能一直开发者工具吧。 于是通过改 css 样式,干掉了必须关注后才能查看的限制
// remove 关注后查看
if ($("#article_content")[0])
{
$("#article_content").attr("style","height:auto");
}
// remove 关注后查看
if ($(".hide-article-box.hide-article-pos.text-center")[0])
{
$(".hide-article-box.hide-article-pos.text-center").attr("style","display:none");
}
攻防升级
但是呢有一天,发现又复制不了了,一复制就 弹登录框,并且也没有复制成功,那么必然是又升级了。于是分析后发现,csdn 又新增了一个 copy 事件的监听。于是想着把这个copy事件给移除了。但是搞了半天, 效果并不理想,于是开始咨询我的人生导师,chat-gpt 。 我的老师跟我说,我给你的方法一定好使,你就先 Get all event handler,然后 再一个一个的 remove 就好了,顺带给我贴了一段代码。最后效果也并不是 如我导师说的那样,看来光说不练,ai也是会骗人的。
万物皆可覆盖
最后在一篇文章里面找到了这句话,js的世界,万物皆可覆盖,只要你注册的比他早,然后不把消息传递下去,那他就只能干瞪眼。这句话一下轰开了我理解js的大门,顺便又给了一句代码
// 阻止复制时弹窗,然后禁止复制的变态行为
window.addEventListener('copy', function(e){e.stopPropagation()}, true);
于是乎事情完美的解决了
完整代码
以下代码是 TamperMonkey 的脚本代码,后果自负
// ==UserScript==
// @name 去掉csdn登录复制限制
// @namespace https://tgjarwl.github.io/
// @version 0.1
// @description 去掉csdn登录复制限制
// @author tgjarwl
// @match *://blog.csdn.net/*
// @match *://www.php.cn/*
// @icon https://www.google.com/s2/favicons?sz=64&domain=csdn.net
// @grant unsafeWindow
// @require https://cdn.staticfile.org/jquery/3.4.1/jquery.min.js
// ==/UserScript==
(function() {
'use strict';
// Your code here...
// 阻止复制时弹窗,然后禁止复制的变态行为
window.addEventListener('copy', function(e){e.stopPropagation()}, true);
//var $ = unsafeWindow.jQuery;
$(document).ready(function(){
var sHost = unsafeWindow.location.href;
console.log(sHost);
if (sHost.indexOf("www.php.cn") != -1)
{
setTimeout(function(){
if ($("code").length > 0)
{
$("code").attr("style", "user-select:auto");
}
//$(".html .plain").attr("style", "user-select:auto");
}, 2000);
}
else if (sHost.indexOf("blog.csdn.net") != -1)
{
// 移除限制复制功能
if($("#content_views pre")[0])
{
$("#content_views pre").attr("style","user-select:auto");
}
// 移除限制复制功能
if ($("#content_views pre code")[0])
{
$("#content_views pre code").attr("style","user-select:auto");
}
// remove 登录后复制
if ($(".hljs-button.signin")[0])
{
$(".hljs-button.signin").attr("style", "display:none");
}
// remove 关注后查看
if ($("#article_content")[0])
{
$("#article_content").attr("style","height:auto");
}
// remove 关注后查看
if ($(".hide-article-box.hide-article-pos.text-center")[0])
{
$(".hide-article-box.hide-article-pos.text-center").attr("style","display:none");
}
}
});
})();