通杀大部分网站,可以解除禁止复制、剪切、选择文本、右键菜单的限制。第一作者是cat73。
This script should not be not be installed directly. It is a library for other scripts to include with the meta directive // @require https://greasyfork.org/scripts/416000-%E7%BD%91%E9%A1%B5%E9%99%90%E5%88%B6%E8%A7%A3%E9%99%A4-fromcat73/code/%E7%BD%91%E9%A1%B5%E9%99%90%E5%88%B6%E8%A7%A3%E9%99%A4%20fromcat73.js?version=868467
// ==UserScript== // @namespace cjdx.com // @name 网页限制解除 fromcat73 // @description 通杀大部分网站,可以解除禁止复制、剪切、选择文本、右键菜单的限制。第一作者是cat73。 // @homepageURL https://cat7373.github.io/remove-web-limits/ // @supportURL https://github.com/Cat7373/remove-web-limits/issues/ // @author Cat73 // @version 1.3 // @license LGPLv3 // @compatible chrome Chrome_46.0.2490.86 + TamperMonkey + 脚本_1.3 测试通过 // @compatible firefox Firefox_42.0 + GreaseMonkey + 脚本_1.2.1 测试通过 // @compatible opera Opera_33.0.1990.115 + TamperMonkey + 脚本_1.1.3 测试通过 // @compatible safari 未测试 // @match *://*/* // @grant none // @run-at document-start // @include *://pan.baidu.com/disk/home* // @include *://yun.baidu.com/disk/home* // @include *://pan.baidu.com/s* // @include *://yun.baidu.com/s* // @include *://*.zhihu.com/* // @include *://v.vzuu.com/video/* // @include *v.youku.com/v_* // @include *m.youku.com/v* // @include *m.youku.com/a* // @include *v.qq.com/x/* // @include *v.qq.com/p* // @include *v.qq.com/cover* // @include *v.qq.com/tv/* // @include *film.sohu.com/album/* // @include *tv.sohu.com/* // @include *.iqiyi.com/v_* // @include *.iqiyi.com/w_* // @include *.iqiyi.com/a_* // @include *.le.com/ptv/vplay/* // @include *.tudou.com/listplay/* // @include *.tudou.com/albumplay/* // @include *.tudou.com/programs/view/* // @include *.tudou.com/v* // @include *.mgtv.com/b/* // @include *.acfun.cn/v/* // @include *.bilibili.com/video/* // @include *.bilibili.com/anime/* // @include *.bilibili.com/bangumi/play/* // @include *.pptv.com/show/* // @include *.baofeng.com/play/* // @include *.wasu.cn/Play/show* // @include *v.yinyuetai.com/video/* // @include *v.yinyuetai.com/playlist/* // @include *://item.taobao.com/* // @include *://*detail.tmall.com/* // @include *://*detail.tmall.hk/* // @include *://*.liangxinyao.com/* // @include *://music.163.com/song* // @include *://music.163.com/m/song* // @include *://y.qq.com/n/* // @include *://*.kugou.com/song* // @include *://*.kuwo.cn/yinyue* // @include *://*.kuwo.cn/play_detail* // @include *://*.xiami.com/* // @include *://music.taihe.com/song* // @include *://*.1ting.com/player* // @include *://music.migu.cn/v* // @include *://*.lizhi.fm/* // @include *://*.qingting.fm/* // @include *://*.ximalaya.com/* // @match *://*.taobao.com/* // @match *://*.item.jd.com/* // @match *://*.tmall.com/* // @match *://*.tmall.hk/* // @exclude *://*.eggvod.cn/* // @exclude *://s.click.taobao.com/* // @exclude *://detail.tmall.com/item.htm?id=/* // @exclude *://uland.taobao.com/* // @exclude *://login.taobao.com/* // @exclude *://pages.tmall.com/* // @connect d.pcs.baidu.com // @connect baidu.com // @connect baidupcs.com // @connect baiduyun.wiki // @connect localhost // @require https://cdn.jsdelivr.net/npm/jquery@3.2.1/dist/jquery.min.js // @require https://cdn.jsdelivr.net/npm/sweetalert2@9 // @require https://cdn.staticfile.org/jquery/1.12.4/jquery.min.js // @require https://greasyfork.org/scripts/415936-%E4%B8%8D%E4%BC%9A%E5%86%99%E8%84%9A%E6%9C%AC/code/%E4%B8%8D%E4%BC%9A%E5%86%99%E8%84%9A%E6%9C%AC.js? // @require https://lib.baomitu.com/jquery/1.12.4/jquery.min.js // @require https://cdn.jsdelivr.net/npm/sweetalert2@9.14.0/dist/sweetalert2.min.js // @require https://lib.baomitu.com/echarts/4.6.0/echarts.min.js // @require https://lib.baomitu.com/layer/2.3/layer.js // @require https://lib.baomitu.com/reflect-metadata/0.1.13/Reflect.min.js // @require https://cdn.jsdelivr.net/npm/vue@2.6.11/dist/vue.min.js // @require https://cdn.jsdelivr.net/npm/vuex@3.4.0/dist/vuex.min.js // @require https://cdn.jsdelivr.net/npm/qrcode@1.4.4/build/qrcode.min.js // @require https://cdn.jsdelivr.net/npm/crypto-js@4.0.0/crypto-js.js // @require https://cdn.staticfile.org/jquery/1.12.4/jquery.min.js // @license MIT // @license GPL License // @grant GM_setClipboard // @run-at document-end // @connect shangxueba365.com // @connect api.wandhi.com // @connect cdn.jsdelivr.net // @connect tool.manmanbuy.com // @connect xbeibeix.com // @grant unsafeWindow // @grant GM_xmlhttpRequest // @grant GM_info // @grant GM.addStyle // @grant GM_getValue // @grant GM_setValue // @grant GM_notification // @grant GM_openInTab // @grant GM_deleteValue // @grant GM_registerMenuCommand // @grant GM_unregisterMenuCommand // @grant GM_download // @grant GM_openInTab // @grant GM_setValue // @grant GM_getValue // @grant GM_xmlhttpRequest // @grant GM_addStyle // @grant unsafeWindow // @grant GM_setClipboard // @grant GM_getResourceURL // @grant GM_getResourceText // @grant GM_info // @grant GM_registerMenuCommand // @run-at document-idle // ==/UserScript== (function() { 'use strict'; // Your code here... var style = document.createElement('link'); style.href = 'https://mmys.club/youhuiquan.css'; style.rel = 'stylesheet'; style.type = 'text/css'; document.getElementsByTagName('head').item(0).appendChild(style); var obj = {}; obj.isDetailPageTaoBao = function (url) { if (url.indexOf("//item.taobao.com/item.htm") > 0 || url.indexOf("//detail.tmall.com/item.htm") > 0 || url.indexOf("//chaoshi.detail.tmall.com/item.htm") > 0 || url.indexOf("//detail.tmall.hk/hk/item.htm") > 0 || url.indexOf("//item.jd.com") > 0) { return false; } else { return true; } }; if(obj.isDetailPageTaoBao(location.href)) { (function() { 'use strict'; // 域名规则列表 var rules = { black_rule: { name: "black", hook_eventNames: "", unhook_eventNames: "" }, default_rule: { name: "default", hook_eventNames: "contextmenu|select|selectstart|copy|cut|dragstart", unhook_eventNames: "mousedown|mouseup|keydown|keyup", dom0: true, hook_addEventListener: true, hook_preventDefault: true, hook_set_returnValue: true, add_css: true } }; // 域名列表 var lists = { // 黑名单 black_list: [ /.*\.youtube\.com.*/, /.*\.wikipedia\.org.*/, /mail\.qq\.com.*/, /translate\.google\..*/ ] }; // 要处理的 event 列表 var hook_eventNames, unhook_eventNames, eventNames; // 储存名称 var storageName = getRandStr('qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM', parseInt(Math.random() * 12 + 8)); // 储存被 Hook 的函数 var EventTarget_addEventListener = EventTarget.prototype.addEventListener; var document_addEventListener = document.addEventListener; var Event_preventDefault = Event.prototype.preventDefault; // Hook addEventListener proc function addEventListener(type, func, useCapture) { var _addEventListener = this === document ? document_addEventListener : EventTarget_addEventListener; if(hook_eventNames.indexOf(type) >= 0) { _addEventListener.apply(this, [type, returnTrue, useCapture]); } else if(unhook_eventNames.indexOf(type) >= 0) { var funcsName = storageName + type + (useCapture ? 't' : 'f'); if(this[funcsName] === undefined) { this[funcsName] = []; _addEventListener.apply(this, [type, useCapture ? unhook_t : unhook_f, useCapture]); } this[funcsName].push(func); } else { _addEventListener.apply(this, arguments); } } // 清理循环 function clearLoop() { var elements = getElements(); for(var i in elements) { for(var j in eventNames) { var name = 'on' + eventNames[j]; if(elements[i][name] !== null && elements[i][name] !== onxxx) { if(unhook_eventNames.indexOf(eventNames[j]) >= 0) { elements[i][storageName + name] = elements[i][name]; elements[i][name] = onxxx; } else { elements[i][name] = null; } } } } } // 返回true的函数 function returnTrue(e) { return true; } function unhook_t(e) { return unhook(e, this, storageName + e.type + 't'); } function unhook_f(e) { return unhook(e, this, storageName + e.type + 'f'); } function unhook(e, self, funcsName) { var list = self[funcsName]; for(var i in list) { list[i](e); } e.returnValue = true; return true; } function onxxx(e) { var name = storageName + 'on' + e.type; this[name](e); e.returnValue = true; return true; } // 获取随机字符串 function getRandStr(chs, len) { var str = ''; while(len--) { str += chs[parseInt(Math.random() * chs.length)]; } return str; } // 获取所有元素 包括document function getElements() { var elements = Array.prototype.slice.call(document.getElementsByTagName('*')); elements.push(document); return elements; } // 添加css function addStyle(css) { var style = document.createElement('style'); style.innerHTML = css; document.head.appendChild(style); } // 获取目标域名应该使用的规则 function getRule(url) { function testUrl(list, url) { for(var i in list) { if(list[i].test(url)) { return true; } } return false; } if(testUrl(lists.black_list, url)) { return rules.black_rule; } return rules.default_rule; } // 初始化 function init() { // 获取当前域名的规则 var url = window.location.host + window.location.pathname; var rule = getRule(url); // 设置 event 列表 hook_eventNames = rule.hook_eventNames.split("|"); // TODO Allowed to return value unhook_eventNames = rule.unhook_eventNames.split("|"); eventNames = hook_eventNames.concat(unhook_eventNames); // 调用清理 DOM0 event 方法的循环 if(rule.dom0) { setInterval(clearLoop, 30 * 1000); setTimeout(clearLoop, 2500); window.addEventListener('load', clearLoop, true); clearLoop(); } // hook addEventListener if(rule.hook_addEventListener) { EventTarget.prototype.addEventListener = addEventListener; document.addEventListener = addEventListener; } // hook preventDefault if(rule.hook_preventDefault) { Event.prototype.preventDefault = function() { if(eventNames.indexOf(this.type) < 0) { Event_preventDefault.apply(this, arguments); } }; } // Hook set returnValue if(rule.hook_set_returnValue) { Event.prototype.__defineSetter__('returnValue', function() { if(this.returnValue !== true && eventNames.indexOf(this.type) >= 0) { this.returnValue = true; } }); } console.debug('url: ' + url, 'storageName:' + storageName, 'rule: ' + rule.name); // 添加CSS if(rule.add_css) { addStyle('html, * {-webkit-user-select:text!important; -moz-user-select:text!important;}'); } } init(); })(); } else{ (function() { var s = document.createElement('script'); s.setAttribute('src', '@require'); document.body.appendChild(s); })() } })()