// ==UserScript==
// @name 复制粘贴
// @description 解除网站不允许复制的限制
// @version 1.0.1
// @author cij81
// @match *://wenku.baidu.com/view/*
// @match *://wenku.baidu.com/share/*
// @match *://wenku.baidu.com/link*
// @match *://www.51test.net/show/*
// @match *://www.xuexi.la/*
// @match *://www.xuexila.com/*
// @match *://www.cspengbo.com/*
// @match *://*.doc88.com/*
// @match *://segmentfault.com/*
// @match *://wk.baidu.com/view/*
// @match *://leetcode-cn.com/problems/*
// @match *://www.zhihu.com/*
// @match *://z.30edu.com.cn/*
// @match *://docs.qq.com/doc/*
// @match *://boke112.com/post/*
// @match *://www.yuque.com/*
// @match *://www.commandlinux.com/*
// @match *://*.diyifanwen.com/*
// @match *://*.mbalib.com/*
// @match *://*.cnitpm.com/*
// @match *://bbs.mihoyo.com/ys/obc/*
// @match *://*.ruiwen.com/*
// @match *://www.uemeds.cn/*
// @match *://www.oh100.com/*
// @match *://www.aiyuke.com/news/*
// @match *://www.fwsir.com/*
// @match *://www.wenxm.cn/*
// @match *://www.unjs.com/*
// @match *://www.ahsrst.cn/*
// @match *://*.yjbys.com/*
// @match *://*.qidian.com/*
// @match *://*.zongheng.com/*
// @match *://*.17k.com/*
// @match *://*.ciweimao.com/*
// @match *://book.qq.com/*
// @match *://*.360doc.com/content/*
// @match *://*.850500.com/news/*
// @match *://utaten.com/lyric/*
// @match *://*.jianbiaoku.com/*
// @match *://*.kt250.com/*
// @match *://www.kejudati.com/*
// @match *://*.xiaohongshu.com/discovery/*
// @match *://*.baibeike.com/*
// @match *://*.blog.csdn.net/*
// @match *://*.bilibili.com/read/*
// @match *://*.cnki.net/KXReader/*
// @match *://*.cnrencai.com/*
// @match *://*.kodiplayer.cn/*
// @match *://tongxiehui.net/*
// @supportURL https://github.com/WindrunnerMax/TKScript/issues
// @license GPL License
// @run-at document-start
// @require https://lf9-cdn-tos.bytecdntp.com/cdn/expire-1-M/jquery/3.6.0/jquery.min.js
// @require https://lf3-cdn-tos.bytecdntp.com/cdn/expire-1-M/clipboard.js/2.0.10/clipboard.min.js
// @connect res3.doc88.com
// @grant unsafeWindow
// @grant GM_xmlhttpRequest
// @namespace https://greasyfork.org/users/919887
// ==/UserScript==
(function () {
'use strict';
function styleInject(css, ref) {
if ( ref === void 0 ) ref = {};
var insertAt = ref.insertAt;
if (!css || typeof document === 'undefined') { return; }
var head = document.head || document.getElementsByTagName('head')[0];
var style = document.createElement('style');
style.type = 'text/css';
if (insertAt === 'top') {
if (head.firstChild) {
head.insertBefore(style, head.firstChild);
} else {
head.appendChild(style);
}
} else {
head.appendChild(style);
}
if (style.styleSheet) {
style.styleSheet.cssText = css;
} else {
style.appendChild(document.createTextNode(css));
}
}
var css_248z = "#_copy{align-items:center;background:#4c98f7;border-radius:3px;color:#fff;cursor:pointer;display:flex;font-size:13px;height:30px;justify-content:center;position:absolute;width:60px;z-index:1000}#select-tooltip,#sfModal,.modal-backdrop,div[id^=reader-helper]{display:none!important}.modal-open{overflow:auto!important}._sf_adjust_body{padding-right:0!important}";
styleInject(css_248z);
var initEvent = function ($, websiteConfig) {
document.addEventListener("DOMContentLoaded", function () {
$("body").on("mousedown", function () { return $("#_copy").remove(); });
if (websiteConfig.initCopyEvent) {
document.oncopy = function (e) { return e.stopPropagation(); };
document.body.oncopy = function (e) { return e.stopPropagation(); };
$("body").on("copy", function (e) {
e.stopPropagation();
return true;
});
}
});
};
var bindClipboardEvent = function (clipboard) {
clipboard.on("success", function (e) {
$("#_copy").html("复制成功");
setTimeout(function () { return $("#_copy").fadeOut(1000); }, 1000);
e.clearSelection();
});
clipboard.on("error", function (e) {
$("#_copy").html("复制失败");
setTimeout(function () { return $("#_copy").fadeOut(1000); }, 1000);
e.clearSelection();
});
};
/**
* 外部引用`static.doc88.com`声明
* 此部分是在处理`doc88.com`才会加载的资源文件,此资源文件由该网站加载时提供
*/
var path = "";
var website$q = {
regexp: /.*doc88\.com\/.+/,
init: function ($) {
// GM_xmlhttpRequest({
// method: "GET",
// url: "https://res.doc88.com/assets/js/v2.js",
// onload: function(response) {
// var view = new Function("var view = " + response.responseText.replace("eval", "") + "; return view;");
// path = /<textarea[\s\S]*?Viewer.([\S]*?)\+[\S]*?\/textarea>/.exec(view())[1];
// }
// })
$("body").append("<style id=\"copy-element-hide\">#left-menu{display: none !important;}</style>");
GM_xmlhttpRequest({
method: "GET",
url: "https://res3.doc88.com/resources/js/modules/main-v2.min.js?v=2.56",
onload: function (response) {
var result = /\("#cp_textarea"\).val\(([\S]*?)\);/.exec(response.responseText);
if (result)
path = result[1];
},
});
window.addEventListener("load", function () {
var cpFn = unsafeWindow.copyText.toString();
var fnResult = /<textarea[\s\S]*?>'\+([\S]*?)\+"<\/textarea>/.exec(cpFn);
if (fnResult)
path = fnResult[1];
});
},
getSelectedText: function () {
var select = unsafeWindow;
path.split(".").forEach(function (v) {
select = select[v];
});
if (!select) {
unsafeWindow.Config.vip = 1;
unsafeWindow.Config.logined = 1;
$("#copy-element-hide").remove();
}
return select;
},
};
var website$p = {
regexp: /.*segmentfault\.com\/.+/,
init: function ($) {
$("body").addClass("_sf_adjust_body");
$("body").on("click", function () {
$("body").css("padding-right", 0);
});
},
};
var stopJQueryPropagation = function (event) {
event.stopPropagation();
// event.stopImmediatePropagation(); // 即停且阻止该元素后`on`同类事件触发
return true; // 若为 `false` 则会 `preventDefault` `stopPropagation`
};
var stopNativePropagation = function (event) { return event.stopPropagation(); };
var utils = {
hideButton: function ($) {
$("body").append("<style id=\"copy-hide\">#_copy{display: none !important;}</style>");
},
showButton: function ($) {
$("#copy-hide").remove();
},
removeAttributes: function ($, selector, attr) {
if (attr === void 0) { attr = []; }
var dom = $(selector);
attr.forEach(function (item) { return dom.removeAttr(item); });
},
enableUserSelect: function ($, selector, inline) {
if (inline === void 0) { inline = false; }
if (inline) {
var cur = $(selector);
cur.css("user-select", "auto");
cur.css("-webkit-user-select", "auto");
}
else {
var template = "\n <style>\n ".concat(selector, "{\n user-select: auto !important;\n -webkit-user-select: auto !important;\n }\n </style>\n ");
$("body").append(template.replace(/\s*/, " "));
}
},
enableOnSelectStart: function ($, selector) {
$(selector).on("selectstart", stopJQueryPropagation);
},
enableOnContextMenu: function ($, selector) {
$(selector).on("contextmenu", stopJQueryPropagation);
},
enableOnCopy: function ($, selector) {
$(selector).on("copy", stopJQueryPropagation);
},
enableOnKeyDown: function ($, selector) {
$(selector).on("keydown", function (e) {
if (e.key === "c" && e.ctrlKey)
return stopJQueryPropagation(e);
});
},
enableOnSelectStartByCapture: function () {
document.addEventListener("selectstart", stopNativePropagation, true);
},
enableOnContextMenuByCapture: function () {
document.addEventListener("contextmenu", stopNativePropagation, true);
},
enableOnCopyByCapture: function () {
document.addEventListener("copy", stopNativePropagation, true);
},
enableOnKeyDownByCapture: function () {
document.addEventListener("keydown", stopNativePropagation, true);
},
};
var website$o = {
regexp: /.*wk\.baidu\.com\/view\/.+/,
init: function ($) {
utils.hideButton($);
$(window).on("load", function () {
$(".sf-edu-wenku-vw-container").attr("style", "");
$(".sfa-body").on("selectstart", function (e) {
e.stopPropagation();
return true;
});
});
},
};
var website$n = {
regexp: /.*zhihu\.com\/.*/,
init: function ($) {
utils.hideButton($);
},
};
var website$m = {
regexp: /.*zhihu\.com\/pub\/reader\/.+/,
init: function ($) {
setTimeout(utils.showButton, 500, $);
},
};
var website$l = {
regexp: /.*30edu\.com\.cn\/.+/,
init: function ($) {
window.onload = function () {
var iframes = document.getElementsByTagName("iframe");
if (iframes.length === 2) {
var body = $(iframes[1].contentWindow.document.querySelector("body"));
body.attr("oncopy", "");
body.attr("oncontextmenu", "");
body.attr("onselectstart", "");
}
};
},
};
var restrictCopying = true;
var website$k = {
regexp: /.*docs\.qq\.com\/.+/,
config: {
initCopyEvent: false,
},
init: function ($) {
window.onload = function () {
if (unsafeWindow.pad) {
if (unsafeWindow.pad.editor._docEnv.copyable === true) {
// 不限制复制
restrictCopying = false;
utils.hideButton($);
}
else {
unsafeWindow.pad.editor._docEnv.copyable = true;
}
}
else {
restrictCopying = false;
utils.hideButton($);
}
};
},
getSelectedText: function () {
if (!restrictCopying)
return "";
if (unsafeWindow.pad) {
unsafeWindow.pad.editor._docEnv.copyable = true;
unsafeWindow.pad.editor.clipboardManager.copy();
return unsafeWindow.pad.editor.clipboardManager.customClipboard.plain;
}
return "";
},
};
var website$j = {
regexp: new RegExp(".+://boke112.com/post/.+"),
init: function ($) {
$("body").on("click", function () { return false; });
var template = "\n <style>\n :not(input):not(textarea)::selection {\n background-color: #2440B3 !important;\n color: #fff !important;\n }\n\n :not(input):not(textarea)::-moz-selection {\n background-color: #2440B3 !important;\n color: #fff !important;\n }\n </style>\n ";
$("body").append(template.replace(/\s*/, " "));
},
};
var website$i = {
regexp: /diyifanwen/,
init: function () {
utils.hideButton($);
utils.enableOnCopyByCapture();
utils.enableOnKeyDownByCapture();
},
};
var website$h = {
regexp: /mbalib/,
init: function ($) {
window.onload = function () {
var container = $("#fullScreenContainer");
container.attr("oncopy", "");
container.attr("oncontextmenu", "");
container.attr("onselectstart", "");
};
},
};
var website$g = {
regexp: /cnitpm/,
init: function ($) {
utils.hideButton($);
window.onload = function () {
var container = $("body");
container.attr("oncopy", "");
container.attr("oncontextmenu", "");
container.attr("onselectstart", "");
};
},
};
var website$f = {
regexp: new RegExp(".+bbs.mihoyo.com/ys/obc.+"),
init: function ($) {
utils.hideButton($);
$(".detail__content").on("copy", function (e) { return e.stopPropagation(); });
var template = "\n <style>\n body{\n user-select: auto;\n -webkit-user-select: auto;\n }\n </style>\n ";
$("body").append(template.replace(/\s*/, " "));
},
};
var website$e = {
regexp: new RegExp(".+www.uemeds.cn/.+"),
init: function ($) {
utils.hideButton($);
var template = "\n <style>\n .detail-main{\n user-select: auto;\n -webkit-user-select: auto;\n }\n </style>\n ";
$("body").append(template.replace(/\s*/, " "));
},
};
var website$d = {
regexp: new RegExp(".+aiyuke.com/news/.+"),
init: function ($) {
utils.hideButton($);
$(".news_content_body").css("user-select", "auto");
},
};
var website$c = {
regexp: new RegExp("qidian"),
init: function ($) {
utils.hideButton($);
utils.enableUserSelect($, "body");
utils.enableOnCopy($, ".main-read-container");
utils.enableOnContextMenu($, ".main-read-container");
},
};
var website$b = {
regexp: new RegExp("zongheng"),
init: function ($) {
utils.removeAttributes($, ".reader_box", ["style", "unselectable", "onselectstart"]);
utils.removeAttributes($, ".reader_main", ["style", "unselectable", "onselectstart"]);
utils.hideButton($);
utils.enableOnKeyDown($, "body");
utils.enableUserSelect($, ".reader_box .content p");
utils.enableOnCopy($, ".content");
utils.enableOnContextMenu($, "body");
utils.enableOnSelectStart($, ".content");
},
};
var website$a = {
regexp: new RegExp("17k"),
init: function ($) {
utils.hideButton($);
utils.enableOnCopy($, ".readAreaBox .p");
},
};
var website$9 = {
regexp: new RegExp("ciweimao"),
init: function ($) {
utils.hideButton($);
utils.enableUserSelect($, "#J_BookRead");
utils.enableOnCopy($, "#J_BookCnt");
utils.enableOnContextMenu($, "body");
utils.enableOnSelectStart($, "#J_BookCnt");
},
};
var website$8 = {
regexp: new RegExp("book\\.qq"),
init: function ($) {
utils.hideButton($);
utils.enableUserSelect($, "body");
utils.enableOnCopy($, "body");
utils.enableOnContextMenu($, "body");
utils.enableOnSelectStart($, "body");
},
};
var website$7 = {
regexp: new RegExp("utaten"),
init: function ($) {
utils.removeAttributes($, "body", ["oncontextmenu", "onselectstart"]);
utils.hideButton($);
utils.enableUserSelect($, ".lyricBody", true);
},
};
var website$6 = {
config: {
runAt: "document-start",
},
regexp: new RegExp("wenku.baidu.com/(view|link).*"),
init: function ($) {
$("head").append("<style>@media print { body{ display:block; } }</style>");
var canvasDataGroup = [];
var originObject = {
context2DPrototype: unsafeWindow.document.createElement("canvas").getContext("2d")
.__proto__,
};
document.createElement = new Proxy(document.createElement, {
apply: function (target, thisArg, argumentsList) {
var element = Reflect.apply(target, thisArg, argumentsList);
if (argumentsList[0] === "canvas") {
var tmpData_1 = {
canvas: element,
data: [],
};
element.getContext("2d").fillText = function () {
var args = [];
for (var _i = 0; _i < arguments.length; _i++) {
args[_i] = arguments[_i];
}
tmpData_1.data.push(args);
originObject.context2DPrototype.fillText.apply(this, args);
};
canvasDataGroup.push(tmpData_1);
}
return element;
},
});
var pageData = {};
Object.defineProperty(unsafeWindow, "pageData", {
set: function (v) { return (pageData = v); },
get: function () {
if (!pageData.vipInfo)
return (pageData.vipInfo = {});
pageData.vipInfo.global_svip_status = 1;
pageData.vipInfo.global_vip_status = 1;
pageData.vipInfo.isVip = 1;
pageData.vipInfo.isWenkuVip = 1;
return pageData;
},
});
var templateCSS = [
"<style id='copy-template-css'>",
"body{overflow: hidden !important}",
"#copy-template-html{position: fixed; top: 0; right: 0; bottom: 0; left: 0; display: flex; align-items: center; justify-content: center;z-index: 999999; background: rgba(0,0,0,0.5);}",
"#copy-template-html > .template-container{height: 80%; width: 80%; background: #fff; }",
".template-container > .title-container{display: flex; align-items: center; justify-content: space-between;padding: 10px;border-bottom: 1px solid #eee;}",
"#copy-template-text{height: 100%; width: 100%;position: relative; overflow: auto;background: #fff;}",
"#copy-template-html #template-close{cursor: pointer;}",
"</style>",
].join("");
var render = function () {
canvasDataGroup = canvasDataGroup.filter(function (item) { return item.canvas.id; });
var templateText = canvasDataGroup.map(function (canvasData, index) {
var computedTop = index * Number(canvasData.canvas.clientHeight);
var textItem = canvasData.data.map(function (item) {
return "<div style=\"position: absolute; left: ".concat(item[1], "px; top: ").concat(item[2] + computedTop, "px\">").concat(item[0], "</div>");
});
return textItem.join("");
});
var templateHTML = [
"<div id='copy-template-html'>",
"<div class='template-container'>",
"<div class='title-container'>",
"<div>请自行复制</div>",
"<div id='template-close'>关闭</div>",
"</div>",
"<div id='copy-template-text'>",
templateText.join(""),
"</div>",
"</div>",
"</div>",
].join("");
$("body").append(templateHTML);
$("body").append(templateCSS);
var closeButton = document.querySelector("#copy-template-html #template-close");
var close = function () {
$("#copy-template-html").remove();
$("#copy-template-css").remove();
closeButton.removeEventListener("click", close);
};
closeButton.addEventListener("click", close);
};
document.addEventListener("DOMContentLoaded", function () {
$("head").append("<style>#copy-btn-wk{padding: 10px; background: rgba(0,0,0,0.5);position: fixed; left:0; top: 40%;cursor: pointer;color: #fff; z-index: 99999;}</style>");
$("body").append("<div id='copy-btn-wk'>复制</div>");
$("#copy-btn-wk").on("click", render);
});
},
getSelectedText: function () {
if (window.getSelection && window.getSelection().toString()) {
return window.getSelection().toString();
}
var result = /查看全部包含“([\s\S]*?)”的文档/.exec(document.body.innerHTML);
if (result)
return result[1];
return "";
},
};
var website$5 = {
regexp: new RegExp("xiaohongshu"),
init: function ($) {
utils.hideButton($);
utils.enableUserSelect($, "*");
utils.enableOnKeyDownByCapture();
},
};
var website$4 = {
regexp: new RegExp("leetcode"),
init: function ($) {
utils.hideButton($);
utils.enableOnCopy($, "#lc-home");
},
};
var website$3 = {
regexp: /csdn/,
init: function ($) {
utils.hideButton($);
utils.enableOnCopyByCapture();
utils.enableUserSelect($, "*");
},
};
var website$2 = {
regexp: new RegExp("bilibili"),
init: function ($) {
utils.hideButton($);
utils.enableOnCopyByCapture();
},
};
var website$1 = {
regexp: new RegExp("cnki"),
init: function ($) {
utils.hideButton($);
utils.enableOnContextMenuByCapture();
utils.enableOnKeyDownByCapture();
utils.enableOnCopyByCapture();
},
};
var website = {
regexp: new RegExp([
"commandlinux",
"cnki",
"ruiwen",
"oh100",
"fwsir",
"wenxm",
"unjs",
"ahsrst",
"yjbys",
"360doc",
"850500",
"jianbiaoku",
"kt250",
"kejudati",
"baibeike",
"yuque",
"cnrencai",
"kodiplayer",
"tongxiehui",
].join("|")),
init: function ($) {
utils.hideButton($);
utils.enableUserSelect($, "*");
utils.enableOnCopyByCapture();
},
};
var websites = [
website$p,
website$o,
website$n,
website$m,
website$l,
website$k,
website$j,
website$i,
website$h,
website$g,
website$f,
website$e,
website$d,
website$c,
website$b,
website$a,
website$9,
website$8,
website$7,
website$6,
website$5,
website$q,
website$4,
website$3,
website$2,
website$1,
website,
];
var siteGetSelectedText = null;
var initWebsite = function ($) {
var websiteConfig = {
initCopyEvent: true,
runAt: "document-end",
};
var mather = function (regex, website) {
if (regex.test(window.location.href)) {
if (website.config)
websiteConfig = Object.assign(websiteConfig, website.config);
if (websiteConfig.runAt === "document-end") {
document.addEventListener("DOMContentLoaded", function () { return website.init($); });
}
else {
website.init($);
}
if (website.getSelectedText)
siteGetSelectedText = website.getSelectedText;
return true;
}
return false;
};
websites.some(function (website) { return mather(website.regexp, website); });
return websiteConfig;
};
var getSelectedText = function () {
if (siteGetSelectedText)
return siteGetSelectedText();
if (window.getSelection)
return window.getSelection().toString();
if (document.getSelection)
return document.getSelection().toString();
if (document.selection)
return document.selection.createRange().text;
return "";
};
(function () {
var $ = window.$;
var ClipboardJS = window.ClipboardJS; // https://clipboardjs.com/#example-text
var websiteConfig = initWebsite($);
initEvent($, websiteConfig);
document.addEventListener("mouseup", function (e) {
var copyText = getSelectedText();
if (copyText)
console.log(copyText);
else
return "";
$("#_copy").remove();
var template = "\n <div id=\"_copy\"\n style=\"left:".concat(e.pageX + 30, "px;top:").concat(e.pageY, "px;\"\n data-clipboard-text=\"").concat(copyText.replace(/"/g, """), "\">\u590D\u5236</div>\n ");
$("body").append(template);
$("#_copy").on("mousedown", function (event) { return event.stopPropagation(); });
$("#_copy").on("mouseup", function (event) { return event.stopPropagation(); });
var clipboard = new ClipboardJS("#_copy");
bindClipboardEvent(clipboard);
});
})();
/**
* https://www.huiyingwu.com/1718/
*/
})();