TestGorilla Mouse Exit Bypass

Spoofs mouse behavior on TestGorilla to prevent detection of mouse movements outside the window. Clamps cursor position and blocks mouseleave/mouseout event listeners.

Чтобы установить этот скрипт, вы сначала должны установить расширение браузера, например Tampermonkey, Greasemonkey или Violentmonkey.

Чтобы установить этот скрипт, вы сначала должны установить расширение браузера, например Tampermonkey или Violentmonkey.

Чтобы установить этот скрипт, вы сначала должны установить расширение браузера, например Tampermonkey или Violentmonkey.

Чтобы установить этот скрипт, вы сначала должны установить расширение браузера, например Tampermonkey или Userscripts.

Чтобы установить этот скрипт, сначала вы должны установить расширение браузера, например Tampermonkey.

Чтобы установить этот скрипт, вы должны установить расширение — менеджер скриптов.

(у меня уже есть менеджер скриптов, дайте мне установить скрипт!)

Чтобы установить этот стиль, сначала вы должны установить расширение браузера, например Stylus.

Чтобы установить этот стиль, сначала вы должны установить расширение браузера, например Stylus.

Чтобы установить этот стиль, сначала вы должны установить расширение браузера, например Stylus.

Чтобы установить этот стиль, сначала вы должны установить расширение — менеджер стилей.

Чтобы установить этот стиль, сначала вы должны установить расширение — менеджер стилей.

Чтобы установить этот стиль, сначала вы должны установить расширение — менеджер стилей.

(у меня уже есть менеджер стилей, дайте мне установить скрипт!)

// ==UserScript==
// @name         TestGorilla Mouse Exit Bypass
// @namespace    https://greasyfork.org/en/users/1461725-scriptninja
// @version      1.0.1
// @description  Spoofs mouse behavior on TestGorilla to prevent detection of mouse movements outside the window. Clamps cursor position and blocks mouseleave/mouseout event listeners.
// @author       ScriptNinja
// @license      MIT
// @match        https://*.testgorilla.com/*
// @icon         https://www.google.com/s2/favicons?domain=testgorilla.com
// @grant        none
// @run-at       document-start
// ==/UserScript==


(function() {
    'use strict';

    // Define the boundaries of the "assessment window"
    const FAKE_WINDOW = {
        xMin: 0,          // Left edge
        xMax: window.innerWidth,  // Right edge
        yMin: 0,          // Top edge
        yMax: window.innerHeight // Bottom edge
    };

    // Override MouseEvent properties (clientX, clientY)
    const originalMouseEvent = MouseEvent.prototype;
    const originalClientX = Object.getOwnPropertyDescriptor(MouseEvent.prototype, 'clientX');
    const originalClientY = Object.getOwnPropertyDescriptor(MouseEvent.prototype, 'clientY');

    Object.defineProperty(MouseEvent.prototype, 'clientX', {
        get: function() {
            let x = originalClientX.get.call(this);
            // Clamp X to fake window boundaries
            return Math.max(FAKE_WINDOW.xMin, Math.min(x, FAKE_WINDOW.xMax));
        },
        configurable: true
    });

    Object.defineProperty(MouseEvent.prototype, 'clientY', {
        get: function() {
            let y = originalClientY.get.call(this);
            // Clamp Y to fake window boundaries
            return Math.max(FAKE_WINDOW.yMin, Math.min(y, FAKE_WINDOW.yMax));
        },
        configurable: true
    });

    // Block mouseleave events
    const originalAddEventListener = EventTarget.prototype.addEventListener;
    EventTarget.prototype.addEventListener = function(type, listener, options) {
        if (type === 'mouseleave' || type === 'mouseout') {
            console.log("Blocked mouseleave/mouseout listener");
            return; // Skip adding the listener
        }
        originalAddEventListener.call(this, type, listener, options);
    };

    console.log("Mouse spoofing active");
})();