您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Simple tool to temporarily prevent site from using popular methods of DevTools detection. Do not leave enabled!
当前为
- // ==UserScript==
- // @name DevTools Anti-Detector
- // @namespace http://tampermonkey.net/
- // @version 0.3
- // @description Simple tool to temporarily prevent site from using popular methods of DevTools detection. Do not leave enabled!
- // @author lainverse
- // @match *://*/*
- // @grant unsafeWindow
- // @run-at document-start
- // ==/UserScript==
- (function() {
- 'use strict';
- let knownRoots = new WeakSet();
- function wrapRegExp(root) {
- if (knownRoots.has(root))
- return;
- let _proto = void 0;
- try {
- _proto = root.RegExp.prototype;
- } catch(ignore) {
- return;
- }
- // Prevent RegExpt + toString trick (technically possible with any other object, but I encountered only this one
- let _RE_tS = Object.getOwnPropertyDescriptor(_proto, 'toString');
- let _RE_tSV = _RE_tS.value || _RE_tS.get();
- let fts = Function.prototype.toString;
- Object.defineProperty(_proto, 'toString', {
- enumerable: _RE_tS.enumerable,
- configurable: _RE_tS.configurable,
- get: () => _RE_tSV,
- set: function(val) {
- console.warn('Attempt to change toString for', this, 'with', fts.call(val));
- //throw 'stop it!';
- return true;
- }
- });
- }
- wrapRegExp(unsafeWindow);
- let _contentWindow = Object.getOwnPropertyDescriptor(HTMLIFrameElement.prototype, 'contentWindow');
- let _get_contentWindow = _contentWindow.get;
- _contentWindow.get = function() {
- let _cw = _get_contentWindow.apply(this, arguments);
- if (_cw)
- wrapRegExp(_cw);
- return _cw;
- };
- Object.defineProperty(HTMLIFrameElement.prototype, 'contentWindow', _contentWindow);
- })();