您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
复制网页内容
// ==UserScript== // @name 就不登录-csdn // @namespace github.com/ojer // @match http*://blog.csdn.net/*/article/details/** // @noframes // @grant GM_addStyle // @grant GM_setClipboard // @author ojer // @version 1.2.4 // @description 复制网页内容 // @license MIT // ==/UserScript== const btnText = 'Copy' let editorType = void 0 const copyBtn = 'hljs-button' const codeElement = document.querySelectorAll('pre code') const setStyle = () => { GM_addStyle(` code, pre {user-select: auto !important;} #article_content{height: auto !important;} .hide-article-box.hide-article-pos.text-center{display: none !important;} `) } const execCopy = (e, text) => { const target = e.target || e.srcElement if (target.className.indexOf(copyBtn) > -1) { e.preventDefault() GM_setClipboard(text.replace(/[\u00A0]/gi, ' ')) target.dataset.title = '复制成功' setTimeout(function () { target.dataset.title = btnText }, 3e3) } } const copyCode = (e) => { execCopy(e, e.currentTarget.innerText) } const copyParentNodeCode = (e) => { execCopy(e, e.currentTarget.parentNode.innerText) } const addCopyBtnByType = () => { try { let e = undefined if ('ckeditor' == editorType) { e = document.querySelectorAll('code.hljs') for (var t in e) { if (e.hasOwnProperty(t)) { addCopyButton(e[t].parentNode) } } } else { e = codeElement for (var t in e) { if (e.hasOwnProperty(t)) { addCopyButton(e[t]) } } } } catch (n) { console.error('CopyButton error: ', n) } } const addCopyButton = (e) => { if (e === null || 'object' !== typeof e) { return } const signin = '.signin(event)' let o = 'hljs' let clickFun = '.copyCode(event)' if ('mdeditor' === editorType) { o = 'mdcp' } clickFun = o + clickFun // clickFun = o + signin e.innerHTML = e.innerHTML + `<div class="hljs-button {2}" data-title="${btnText}" data-report-click='{"spm": "1001.2101.3001.4334"}'></div>` if ('hljs' === o) { e.querySelector('.hljs-button').setAttribute('onclick', clickFun) } else { e.setAttribute('onclick', clickFun) e.style.position = 'unset' } } const initCopy = () => { document.querySelectorAll('.hljs-button').forEach((e) => { e.remove() }) let i = 0 const intervalId = setInterval(() => { if (this.unsafeWindow.csdn && this.unsafeWindow.csdn.loginBox && this.unsafeWindow.csdn.loginBox.show) { this.unsafeWindow.csdn.loginBox.show = () => { return 0 } clearInterval(intervalId) } if (i++ > 100) { clearInterval(intervalId) } }, 2e3) const onCopy = (t) => { if (window.getSelection().getRangeAt(0).toString().length > 0) { t.preventDefault() var e = window .getSelection() .getRangeAt(0) .toString() .replace(/[\u00A0]/gi, ' ') GM_setClipboard(e) } } document.querySelector('#content_views').addEventListener('copy', onCopy) document.querySelector('#content_views').addEventListener('keydown', onCopy) addCopyBtnByType() } const init = () => { const winw = this.unsafeWindow if (document.querySelectorAll('div.htmledit_views').length > 0) { editorType = 'ckeditor' Object.assign(winw.hljs, { initCopyButtonOnLoad: initCopy, addCopyButton: addCopyButton, copyCode: copyParentNodeCode, signin: copyParentNodeCode }) } else { if (codeElement.length > 0) { editorType = 'mdeditor' if (!winw.mdcp) { winw.mdcp = {} } Object.assign(winw.mdcp, { copyCode: copyCode, signin: copyCode }) } } initCopy() setStyle() } const intervalId = setInterval(() => { if ('complete' === document.readyState) { setTimeout(() => { init() }, 5e2) clearInterval(intervalId) } }, 1e3)