Absolute Enable Right Click & Copy

Force Enable Right Click & Copy & Highlight

当前为 2016-10-28 提交的版本,查看 最新版本

  1. // ==UserScript==
  2. // @name Absolute Enable Right Click & Copy
  3. // @namespace Absolute Right Click
  4. // @description Force Enable Right Click & Copy & Highlight
  5. // @author Absolute
  6. // @version 1.2.5
  7. // @include http*://*
  8. // @icon https://cdn3.iconfinder.com/data/icons/communication-130/63/cursor-128.png
  9. // @license BSD
  10. // @copyright Absolute, All Right Reserved (2016)
  11. // @grant GM_addStyle
  12. // @Exclude /.*(JPG|PNG|GIF|JPEG|ico|google.[^/]|bing.com|facebook.com|pixiv.net).*/
  13.  
  14. // ==/UserScript==
  15.  
  16. var Sites_List = ['163.com','www.site.com','www.site.com','www.site.com'];
  17.  
  18. (function GetSelection () {
  19. var style = document.createElement('style');
  20. var iStyle = '*{user-select:text!important;-webkit-user-select:text!important;}';
  21. style.type = 'text/css';
  22. if (style.styleSheet) { style.styleSheet.cssText = iStyle; }
  23. else { style.appendChild(document.createTextNode(iStyle)); }
  24. window.getSelection = null;
  25. document.oncontextmenu = null;
  26. document.getElementsByTagName('head')[0].appendChild(style);
  27. document.getElementsByTagName('body')[0].appendChild(style);
  28. })();
  29.  
  30. (function CheckEvents () {
  31. var events = ['oncut','oncopy','ondragstart','onselectstart','oncontextmenu'];
  32. for (var i = 0; i < events.length; i++)
  33. document.body.setAttribute(events[i],'null');
  34. })();
  35.  
  36. (function FixEvents () {
  37. var events = ['contextmenu'];
  38. for (var i = 0; i < events.length; i++) {
  39. document.addEventListener(events[i],function(e){e.stopImmediatePropagation();});
  40. document.addEventListener(events[i],function(e){e.stopPropagation();});
  41. }})();
  42. (function RightClickButton() {
  43. function Mutation (callback) {
  44. this.isCalled = false;
  45. this.isUnbound = false;
  46. this.callback = callback;
  47. this.events = ['DOMAttrModified', 'DOMNodeInserted', 'DOMNodeRemoved', 'DOMCharacterDataModified', 'DOMSubtreeModified'];
  48. this.bind();
  49. }
  50. Mutation.prototype.bind = function () {
  51. this.events.forEach(function (event) {
  52. document.addEventListener(event, this, true);
  53. }.bind(this));
  54. };
  55. Mutation.prototype.handleEvent = function () {
  56. this.isCalled = true;
  57. this.unbind();
  58. };
  59. Mutation.prototype.unbind = function () {
  60. if (this.isUnbound) {
  61. return;
  62. }
  63. this.events.forEach(function (event) {
  64. document.removeEventListener(event, this, true);
  65. }.bind(this));
  66. this.isUnbound = true;
  67. };
  68. function Synchronizetion () {
  69. window.Promise = function () {
  70. };}
  71. Synchronizetion.prototype.restore = function () {
  72. this.isRestoration = true;
  73. };
  74. function EventHandler (event) {
  75. this.event = event;
  76. this.contextmenuEvent = this.createEvent(this.event.type);
  77. this.mouseupEvent = this.createEvent('mouseup');
  78. }
  79. EventHandler.prototype.createEvent = function (type) {
  80. var target = this.event.target;
  81. var event = target.ownerDocument.createEvent('MouseEvents');
  82. event.initMouseEvent(type, this.event.bubbles, this.event.cancelable,
  83. target.ownerDocument.defaultView, this.event.detail,
  84. this.event.screenX, this.event.screenY, this.event.clientX, this.event.clientY,
  85. this.event.ctrlKey, this.event.altKey, this.event.shiftKey, this.event.metaKey,
  86. this.event.button, this.event.relatedTarget);
  87. return event;
  88. };
  89. EventHandler.prototype.fire = function () {
  90. var target = this.event.target;
  91. var contextmenuHandler = function (event) {
  92. event.preventDefault();
  93. }.bind(this);
  94. window.addEventListener(this.event.type, contextmenuHandler, false);
  95. target.dispatchEvent(this.contextmenuEvent);
  96. window.removeEventListener(this.event.type, contextmenuHandler, false);
  97. this.isCanceled = this.contextmenuEvent.defaultPrevented;
  98. target.dispatchEvent(this.mouseupEvent);
  99. };
  100. window.addEventListener('contextmenu', handleEvent, true);
  101. function handleEvent (event) {
  102. event.stopPropagation();
  103. event.stopImmediatePropagation();
  104. var handler = new EventHandler(event);
  105. window.removeEventListener(event.type, handleEvent, true);
  106. var sync = new Synchronizetion();
  107. var mutation = new Mutation(function () {
  108. sync.restore();
  109. });
  110. handler.fire();
  111. window.addEventListener(event.type, handleEvent, true);
  112. if (handler.isCanceled && (mutation.isCalled)) {
  113. event.preventDefault();
  114. }}})();
  115.  
  116. (function CheckIncludeSites () {
  117. var Check = window.location.href;
  118. var Match = RegExp(Sites_List.join('|')).exec(Check);
  119. if (Match) { Absolute_Mod(); }
  120. })();
  121.  
  122. function KeyPress (e) {
  123. if (e.altKey && e.ctrlKey) {
  124. alert("Absolute Right Click Mod Activate !!!");
  125. Absolute_Mod();}}
  126. document.addEventListener("keydown", KeyPress);
  127.  
  128. function Absolute_Mod () {
  129. var events = ['contextmenu','copy','mouseup','mousedown','keyup','keydown','dragstart','selectstart'];
  130. for (var i = 0; i < events.length; i++) {
  131. document.addEventListener(events[i],function(e){e.stopPropagation();},true);
  132. }}
  133.  
  134.  

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址