Skip to content

Instantly share code, notes, and snippets.

@minhqnd
Last active January 22, 2026 10:02
Show Gist options
  • Select an option

  • Save minhqnd/bba9c41b908a6d60d1524f11e6acba7d to your computer and use it in GitHub Desktop.

Select an option

Save minhqnd/bba9c41b908a6d60d1524f11e6acba7d to your computer and use it in GitHub Desktop.
Hướng dẫn tắt Alway on focus

Hướng dẫn tắt Alway on focus

Cái này để làm gì?

Always on focus là một script giúp ngăn các trang web biết rằng bạn đã chuyển tab, rời chuột khỏi cửa sổ hoặc không tương tác với trang web. Đoạn script này có các tính năng sau:

  • Vô hiệu hóa Page Visibility API: Khóa thuộc tính hidden thành falsevisibilityState thành visible. Hỗ trợ tất cả các tiền tố trình duyệt (webkit, moz, ms).

  • Hold trạng thái Focus: Tắt window.onblur() và ghi đè document.hasFocus() luôn trả về True mọi lúc (Ví dụ cái này khi chuyển tab hoặc bấm ra ngoài cửa sổ sẽ không bị tính là thoát tab).

  • Chặn các sự kiện theo dõi: Vô hiệu hóa các sự kiện visibilitychange, blur, pagehide và các sự kiện di chuột như mouseleave, mouseout (Ví dụ giúp video không bị tự động dừng hoặc trò chơi không bị tạm dừng khi chuyển tab).

  • Tối ưu tương tác: Chỉ chặn các sự kiện gây mất focus của hệ thống, vẫn giữ nguyên khả năng nhập liệu trên các thẻ input, textarea và các vùng soạn thảo văn bản.

Ví dụ

Đây là ví dụ về website sẽ thay đổi màu khi không focus vào tab.

img

Test trang này ở đây

Cách dùng nhanh 1 lần

  1. Copy hết code bên dưới
  2. Bấm F12 ở web cần tắt
  3. Vào Console (Bảng điều khiển)
  4. Paste và Enter :)
(function() {
    'use strict';

    const lock = (obj, prop, val) => {
        Object.defineProperty(obj, prop, { get: () => val, set: () => {}, configurable: false });
    };

    ['hidden', 'webkitHidden', 'mozHidden', 'msHidden'].forEach(p => lock(document, p, false));
    ['visibilityState', 'webkitVisibilityState', 'mozVisibilityState', 'msVisibilityState'].forEach(p => lock(document, p, 'visible'));

    document.hasFocus = () => true;

    const block = (e) => {
        if (e.type === 'blur' && (e.target.tagName === 'INPUT' || e.target.tagName === 'TEXTAREA' || e.target.isContentEditable)) return;
        e.stopImmediatePropagation();
        e.preventDefault();
    };

    ['visibilitychange', 'webkitvisibilitychange', 'blur', 'mouseleave', 'mouseenter', 'pagehide', 'mouseout'].forEach(ev => {
        window.addEventListener(ev, block, true);
        document.addEventListener(ev, block, true);
    });

    window.onblur = document.onvisibilitychange = null;
    console.log("%c[ACTIVE]", "color: #00ff00; font-weight: bold;");
})();

Cách dùng sử dụng Userscript

  1. Tải Tampermonkey (Cho Chrome, Edge, Coccoc, etc...) hoặc Userscripts (Cho Safari trên macOS).

  2. Bấm vào đây để cài đặt Scripts

  3. Bật Userscript ở trong Dashboard của Tampermonkey hoặc Userscripts.


Made with ❤️ by @minhqnd.

// ==UserScript==
// @name Always on focus
// @namespace https://minhqnd.com/focustest
// @author minhqnd
// @version 1.2.0
// @description Ngăn chặn phát hiện chuyển tab, rời chuột hoặc mất focus.
// @include *
// @run-at document-start
// @grant none
// @updateURL https://gist.githubusercontent.com/minhqnd/bba9c41b908a6d60d1524f11e6acba7d/raw/alwaysonfocus.user.js
// @downloadURL https://gist.githubusercontent.com/minhqnd/bba9c41b908a6d60d1524f11e6acba7d/raw/alwaysonfocus.user.js
// ==/UserScript==
(function() {
'use strict';
const lock = (obj, prop, val) => {
Object.defineProperty(obj, prop, { get: () => val, set: () => {}, configurable: false });
};
['hidden', 'webkitHidden', 'mozHidden', 'msHidden'].forEach(p => lock(document, p, false));
['visibilityState', 'webkitVisibilityState', 'mozVisibilityState', 'msVisibilityState'].forEach(p => lock(document, p, 'visible'));
document.hasFocus = () => true;
const block = (e) => {
if (e.type === 'blur' && (e.target.tagName === 'INPUT' || e.target.tagName === 'TEXTAREA' || e.target.isContentEditable)) return;
e.stopImmediatePropagation();
e.preventDefault();
};
['visibilitychange', 'webkitvisibilitychange', 'blur', 'mouseleave', 'mouseenter', 'pagehide', 'mouseout'].forEach(ev => {
window.addEventListener(ev, block, true);
document.addEventListener(ev, block, true);
});
window.onblur = document.onvisibilitychange = null;
console.log("%c[ACTIVE]", "color: #00ff00; font-weight: bold;");
})();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment