An accident started with the edge plug-in

0. Sequence

Today, I wanted to play 4399 on a whim, so I opened the flash hall and played for a while. Big fish eat small fish. It suddenly occurred to me that edge has a plug-in. Can the next plug-in support false so that the flash hall can be deleted. Incidentally, school homework should also be flash, which makes your scalp numb.

After playing for several hours, I was going to watch a big thing that can't be seen at night

1. flash that ends hastily

The plug-in under edge is very convenient. It's over what you like. chrome needs FQ. During this period, I tried several flash plug-ins. None of them can play 4399. Bad comments.

2. Visually inspect the accelerator to eat ash

I flipped to the accelerator and remembered that I hadn't visited the p station (blue) for a long time. I went up for free. So I downloaded this thing and connected me to the website of Australian noodles, my son's favorite food.

 

Although the network speed is worrying, it is really connected to station p.

The accident happened after a happy stroll. Click disconnect, OK, it can't be disconnected. But it's not a big problem. Close the browser and you'll lose it. Open the browser again. Why is this web page so slow. But in building 22, it's normal. Disconnect the campus network and reconnect. It's still so slow. I think something is wrong. I asked my roommate if you have an Internet. My roommate said yes. OK, maybe the accelerator changed the port to somewhere. Change dns. However, when you open it, dns is automatically obtained. I don't know what can be changed. I've never been so eager to learn Jiwang. Finally, the free stuff was deleted. The network speed was normal. It was really cheap and not good qaq

Finally, find one who says it's OK to pay. When will you have money(

  

 

3.Tampermonkey

Like visiting Taobao, you can't get around the oil monkey if you start searching for interesting plug-ins. Oil monkey is a script manager plug-in, which can make a lot of flowers. Although I really want nectarines when I see these two words. Download one at the speed of light, and the top bar becomes like this:

  

Then I saw a lot of good things, such as online disk unlimited download, web page advertising. I decided to download the whole online disk without speed limit first. I won't give Baidu krypton another penny.

Websites with many good things: Greasy Fork

Incidentally, when downloading chrome, you can first download the whole crx, change the suffix to rar, unzip it, and then add a folder in the developer tool. The official website of the oil monkey will also be returned by the wall. I heard that many plug-ins of edge and chrome are universal and can be copied directly, but I didn't try.

4. Online disk direct link download assistant

Lose a tutorial first. Network disk direct link download assistant

From here, we should pay attention to a official account, and then it will give you the password, and it will be convenient to use it.

Generally speaking, you can add the script into the oil monkey first. You can install it directly or click the plus signThen copy the code in. At this time, you can already see the download button when you open Baidu disk.  

        

The four downloads correspond to four different ways. The next Xdown corresponds to Aria download. Click it and a link will come out. Just put this link in Xdown. It should be faster, but the dormitory network is too big to see. I'll try a movie downstairs someday.

(Midway search record:

 

One is that there are too many ports in the campus network, which is already slow. Another rob other dormitory network is also immoral, the whole is not good, go into the academic affairs office to drink tea. I have never been so eager to learn network * 2.

 5. Baidu document vip

Recently, baidu documents have to be charged. Two days ago, I could still read the data when I counted the electricity. When my roommate did it, I had to vip to continue watching. The above is foreshadowing.

      1. Disable js (no)

This should be the most common and simplest method, but it won't work. A disabled js cannot be copied as a whole. Or paste the disable method: here

    2. Transfer to translation (single view, copy, line)

Very grass.

      Here, click translation.

 

      Click Baidu translation in the lower left corner. All right, you can copy it.

    3. Selectively close js (no)

From this article: here

Fun is fun, but no, maybe before. To be exact, these methods used to be OK. Open Baidu library full of document s

      

 

Incidentally, the reason why js can't move is that the one in the middle is a canvas. Baidu, I really have you.

      

 

    4. Plug in (no)

Once upon a time, plug-ins were useful, such as Simple Allow Copy

      

 

Click the small triangle in the upper right corner. When it is lit, it indicates that it can be copied. Then open Baidu Library, click, click is not bright. Book that.

   5. Script: Web page restrictions lifted (no)

The lifting of web page restrictions and the lifting of web page restrictions of the improved version (change) were once applicable to Daoke Baba and Baidu documents, but now neither of them can be used. Jinjiang literature city can still be used, and other older websites should also be OK.

Installation address: Web page restrictions lifted

      Look like this. There is a transparent and hard to find icon in the upper left corner. You can only see it when you put it on it:

      Yes, that's the gray place.

      Check when using to refresh the page.

 

In order to find out what's wrong with it, I studied the code carefully (although I didn't understand it)

---------------- split line--------------

  1 // ==UserScript==
  2 // @namespace         https://www.github.com/Cat7373/
  3  
  4 // @name              Web page restrictions lifted
  5 // @name:en           Remove web limits
  6 // @name:zh           Web page restrictions lifted
  7 // @name:zh-CN        Web page restrictions lifted
  8 // @name:zh-TW        Web page restrictions lifted
  9 // @name:ja           ウェブのRegulatory mitigation
 10  
 11 // @description       By killing most websites, you can remove the restrictions on copying, cutting, selecting text and right-click menu.
 12 // @description:en    Pass to kill most of the site, you can lift the restrictions prohibited to copy, cut, select the text, right-click menu.
 13 // @description:zh    By killing most websites, you can remove the restrictions on copying, cutting, selecting text and right-click menu.
 14 // @description:zh-CN By killing most websites, you can remove the restrictions on copying, cutting, selecting text and right-click menu.
 15 // @description:zh-TW By killing most websites, you can remove the restrictions on copying, cutting, selecting text and right-click menu.
 16 // @description:ja    サイトのほとんどをKillすためにFerryし,あなたは,コピーcutりtakeり,テキスト,rightクリックメニューをSelectionすることはprohibitのrestrictをrelieveすることができます. 
 17  
 18 // @homepageURL       https://cat7373.github.io/remove-web-limits/
 19 // @supportURL        https://github.com/Cat7373/remove-web-limits/issues/
 20  
 21 // @author            Cat73
 22 // @version           1.3
 23 // @license           LGPLv3
 24  
 25 // @compatible        chrome Chrome_46.0.2490.86 + TamperMonkey + script_1.3 Test passed
 26 // @compatible        firefox Firefox_42.0 + GreaseMonkey + script_1.2.1 Test passed
 27 // @compatible        opera Opera_33.0.1990.115 + TamperMonkey + script_1.1.3 Test passed
 28 // @compatible        safari Not tested
 29  
 30 // @match             *://*/*
 31 // @grant             none
 32 // @run-at            document-start
 33 // ==/UserScript==
 34 (function() {
 35   'use strict';
 36  
 37   // List of domain name rules
 38   var rules = {
 39     black_rule: {
 40       name: "black",
 41       hook_eventNames: "",
 42       unhook_eventNames: ""
 43     },
 44     default_rule: {
 45       name: "default",
 46       hook_eventNames: "contextmenu|select|selectstart|copy|cut|dragstart",
 47       unhook_eventNames: "mousedown|mouseup|keydown|keyup",
 48       dom0: true,
 49       hook_addEventListener: true,
 50       hook_preventDefault: true,
 51       hook_set_returnValue: true,
 52       add_css: true
 53     }
 54   };
 55   // Domain name list
 56   var lists = {
 57     // blacklist
 58     black_list: [
 59       /.*\.youtube\.com.*/,
 60       /.*\.wikipedia\.org.*/,
 61       /mail\.qq\.com.*/,
 62       /translate\.google\..*/
 63     ]
 64   };
 65  
 66   // To process event list
 67   var hook_eventNames, unhook_eventNames, eventNames;
 68   // Storage name
 69   var storageName = getRandStr('qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM', parseInt(Math.random() * 12 + 8));
 70   // Storage quilt Hook Function of
 71   var EventTarget_addEventListener = EventTarget.prototype.addEventListener;
 72   var document_addEventListener = document.addEventListener;
 73   var Event_preventDefault = Event.prototype.preventDefault;
 74  
 75   // Hook addEventListener proc
 76   function addEventListener(type, func, useCapture) {
 77     var _addEventListener = this === document ? document_addEventListener : EventTarget_addEventListener;
 78     if(hook_eventNames.indexOf(type) >= 0) {
 79       _addEventListener.apply(this, [type, returnTrue, useCapture]);
 80     } else if(this && unhook_eventNames.indexOf(type) >= 0) {
 81       var funcsName = storageName + type + (useCapture ? 't' : 'f');
 82  
 83       if(this[funcsName] === undefined) {
 84         this[funcsName] = [];
 85         _addEventListener.apply(this, [type, useCapture ? unhook_t : unhook_f, useCapture]);
 86       }
 87  
 88       this[funcsName].push(func);
 89     } else {
 90       _addEventListener.apply(this, arguments);
 91     }
 92   }
 93  
 94   // Cleaning cycle
 95   function clearLoop() {
 96     var elements = getElements();
 97  
 98     for(var i in elements) {
 99       for(var j in eventNames) {
100         var name = 'on' + eventNames[j];
101         if(elements[i][name] !== null && elements[i][name] !== onxxx) {
102           if(unhook_eventNames.indexOf(eventNames[j]) >= 0) {
103             elements[i][storageName + name] = elements[i][name];
104             elements[i][name] = onxxx;
105           } else {
106             elements[i][name] = null;
107           }
108         }
109       }
110     }
111   }
112  
113   // return true Function of
114   function returnTrue(e) {
115     return true;
116   }
117   function unhook_t(e) {
118     return unhook(e, this, storageName + e.type + 't');
119   }
120   function unhook_f(e) {
121     return unhook(e, this, storageName + e.type + 'f');
122   }
123   function unhook(e, self, funcsName) {
124     var list = self[funcsName];
125     for(var i in list) {
126       list[i](e);
127     }
128  
129     e.returnValue = true;
130     return true;
131   }
132   function onxxx(e) {
133     var name = storageName + 'on' + e.type;
134     this[name](e);
135  
136     e.returnValue = true;
137     return true;
138   }
139  
140   // Get random string
141   function getRandStr(chs, len) {
142     var str = '';
143  
144     while(len--) {
145       str += chs[parseInt(Math.random() * chs.length)];
146     }
147  
148     return str;
149   }
150  
151   // Get all elements including document
152   function getElements() {
153     var elements = Array.prototype.slice.call(document.getElementsByTagName('*'));
154     elements.push(document);
155  
156     return elements;
157   }
158  
159   // add to css
160   function addStyle(css) {
161     var style = document.createElement('style');
162     style.innerHTML = css;
163     document.head.appendChild(style);
164   }
165  
166   // Get the rules that the target domain name should use
167   function getRule(url) {
168     function testUrl(list, url) {
169       for(var i in list) {
170         if(list[i].test(url)) {
171           return true;
172         }
173       }
174  
175       return false;
176     }
177  
178     if(testUrl(lists.black_list, url)) {
179       return rules.black_rule;
180     }
181  
182     return rules.default_rule;
183   }
184  
185   // initialization
186   function init() {
187     // Get rules for the current domain name
188     var url = window.location.host + window.location.pathname;
189     var rule = getRule(url);
190  
191     // set up event list
192     hook_eventNames = rule.hook_eventNames.split("|");
193     // TODO Allowed to return value
194     unhook_eventNames = rule.unhook_eventNames.split("|");
195     eventNames = hook_eventNames.concat(unhook_eventNames);
196  
197     // Call cleanup DOM0 event Method loop
198     if(rule.dom0) {
199       setInterval(clearLoop, 30 * 1000);
200       setTimeout(clearLoop, 2500);
201       window.addEventListener('load', clearLoop, true);
202       clearLoop();
203     }
204  
205     // hook addEventListener
206     if(rule.hook_addEventListener) {
207       EventTarget.prototype.addEventListener = addEventListener;
208       document.addEventListener = addEventListener;
209     }
210  
211     // hook preventDefault
212     if(rule.hook_preventDefault) {
213       Event.prototype.preventDefault = function() {
214         if(eventNames.indexOf(this.type) < 0) {
215           Event_preventDefault.apply(this, arguments);
216         }
217       };
218     }
219  
220     // Hook set returnValue
221     if(rule.hook_set_returnValue) {
222       Event.prototype.__defineSetter__('returnValue', function() {
223         if(this.returnValue !== true && eventNames.indexOf(this.type) >= 0) {
224           this.returnValue = true;
225         }
226       });
227     }
228  
229     console.debug('url: ' + url, 'storageName: ' + storageName, 'rule: ' + rule.name);
230  
231     // add to CSS
232     if(rule.add_css) {
233       addStyle('html, * {-webkit-user-select:text!important; -moz-user-select:text!important;}');
234     }
235   }
236  
237   init();
238 })();

Two hundred lines, mainly covering the original js functions and css, to make it lose or restore the original functions. Maybe this is hook? Before it executes this function, grab its pointer to execute my function, and the original function will fail.

The main function is init. The process is roughly as follows: first obtain the url and judge whether it is not on the blacklist (getRule method). If it is on the blacklist, do not perform any operation, and if it is not on the blacklist, start overwriting. (this version is a blacklist, and the improved version is a whitelist, that is, only those on the list need to be operated.)

Then there are the following four if.

  • First DOM0. DOM0 is an event written directly in html through onclick. Execute clearLoop every 30 seconds and again after 2.5 seconds. At the same time, add a monitor to continue cleaning as soon as there is load. But clearLoop didn't understand very well. Set a breakpoint and follow it. The keywords captured in Baidu library don't enter the if condition...
  • Then replace its monitor. I wrote a monitor myself and didn't understand what it wrote, but it's no problem.
  •    event.preventDefault() tells the browser not to perform the default action associated with the event. Cancel it, too.
  • returnValue is the attribute of the window object of html in javascript. The purpose is to return the window value. When using window When the showModalDialog function opens a mode window of IE (the mode window cannot operate the parent window after it is opened, and can only be operated when the mode window is closed), it is used to return the value of the window. Also change to true

Above source: Meaning of returnValue and transfer value

  • Last add_css, some cannot be copied because there are properties that cannot be selected. body {- Moz user select: none; - WebKit user select: none;}, Overwrite with {- WebKit user select: text! Important; - Moz user select: text! Important;}

Note: in this method, document head. appendChild(style); The console will report an error and change it to document getElementsByTagName('head')[0]. appendChild(style); Just fine (although it's no use)

The improved version is more functional and targeted at different websites. Web page restrictions lifted (changed)

----------- end of split------------

fine, finished. Still don't know what's wrong. On the way, it was suspected that the browser was compatible, and a chrome was added, but chrome could not be copied. I decided to change my mind and find out what triggered baidu not to let me copy.

Open the page source code and set a breakpoint for the js that can be found. Refresh, start! Click Copy, and the Yellow window pia will pop up without triggering. Numb. Its js are all in one line. It doesn't look good. You have to copy it ctrl+alt+l. forget it, let me go.

      

   6. Library Download assistant (line, can see the full text

I have always wondered why some methods were issued in early December this year. Until station b is opened. "Baidu recently made an update."

All right. This echoes the foreshadowing.

At the end of the article, a web page is sent, which can be used. Today's accident is over. Thank you.

Link: Library Download assistant

6. Tail

Well, the feeling is,

  

Go straight to the picture above.

And the page displayed on my blog is so ugly that I have time to change it.

Added by GrayFox12 on Sun, 02 Jan 2022 23:17:31 +0200