您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Designed for people who use to check their inbox too often. This script hides the Inbox and allows only 3 checks per day for 10 Minutes. Searching for emails and writing emails is possible all day.
当前为
- // ==UserScript==
- // @name Distraction free Gmail // inbox check detox
- // @namespace https://lukasferger.de
- // @version 2025-03-27
- // @description Designed for people who use to check their inbox too often. This script hides the Inbox and allows only 3 checks per day for 10 Minutes. Searching for emails and writing emails is possible all day.
- // @author Lukas
- // @license MIT means
- // @match https://mail.google.com/mail/*
- // @icon https://www.google.com/s2/favicons?sz=64&domain=google.com
- // @grant none
- // @run-at document-start
- // ==/UserScript==
- (function() {
- 'use strict';
- // Konstanten
- const inboxSelector = 'div[role="main"]';
- const styleId = 'inbox-hide-style';
- const overlayId = 'flash-overlay';
- const maxViewsPerDay = 3;
- const viewDuration = 10 * 60 * 1000; // 10 Minuten
- const key = 'emailViews';
- var today = new Date().toISOString().split('T')[0];
- // Zähler laden/speichern
- let views = JSON.parse(localStorage.getItem(key) || '{}');
- if (!views[today]) { views[today] = 0; }
- localStorage.setItem(key, JSON.stringify(views));
- // Statusvariablen
- let manualViewActive = false; // Manuell aktivierte Ansicht (nur im aktuellen Tab)
- let timerId = null;
- let toggleButton = null;
- // CSS zum Ausblenden der Inbox – hier ohne innerHTML
- function injectHideStyle() {
- if (!document.getElementById(styleId)) {
- const style = document.createElement('style');
- style.id = styleId;
- style.textContent = `${inboxSelector} { display: none !important; }`;
- document.documentElement.appendChild(style);
- }
- }
- function removeHideStyle() {
- const style = document.getElementById(styleId);
- if (style) { style.remove(); }
- }
- // Overlay einfügen, um Flash während des Ladevorgangs zu verhindern
- function injectOverlay() {
- if (!document.getElementById(overlayId)) {
- const overlay = document.createElement('div');
- overlay.id = overlayId;
- overlay.style.position = 'fixed';
- overlay.style.top = '0';
- overlay.style.left = '0';
- overlay.style.width = '100%';
- overlay.style.height = '100%';
- overlay.style.backgroundColor = '#ffffff';
- overlay.style.zIndex = '10000';
- overlay.style.pointerEvents = 'none';
- document.documentElement.appendChild(overlay);
- }
- }
- // Overlay wird nach dem Laden entfernt – unabhängig vom Rest
- function removeOverlay() {
- const overlay = document.getElementById(overlayId);
- if (overlay) { overlay.remove(); }
- }
- // Prüft, ob die aktuelle URL eine Suchseite ist
- function isSearchUrl() {
- return location.hash && location.hash.startsWith('#search');
- }
- // Aktiviert den manuellen View – verbraucht einen View und startet den 10-Minuten-Timer
- function activateManualView() {
- today = new Date().toISOString().split('T')[0];
- if (views[today] >= maxViewsPerDay) {
- alert("Tageslimit erreicht.");
- return;
- }
- removeHideStyle();
- manualViewActive = true;
- views[today]++;
- localStorage.setItem(key, JSON.stringify(views));
- updateToggleButton();
- if (timerId) { clearTimeout(timerId); }
- timerId = setTimeout(() => {
- deactivateManualView();
- }, viewDuration);
- }
- // Deaktiviert den manuellen View – Inbox wird ausgeblendet
- function deactivateManualView() {
- injectHideStyle();
- manualViewActive = false;
- updateToggleButton();
- if (timerId) { clearTimeout(timerId); timerId = null; }
- }
- // Aktiviert den Suchmodus – Suchergebnisse sollen immer sichtbar sein, ohne View-Verbrauch
- function activateSearchView() {
- removeHideStyle();
- if (toggleButton) { toggleButton.style.display = 'none'; }
- }
- // Aktualisiert den Toggle-Button: Auf Nicht-Suchseiten sichtbar, Text je nach Status
- function updateToggleButton() {
- if (!toggleButton) return;
- if (isSearchUrl()) {
- toggleButton.style.display = 'none';
- } else {
- toggleButton.style.display = 'block';
- const remaining = maxViewsPerDay - views[today];
- toggleButton.innerText = manualViewActive ? 'Inbox ausblenden' : 'Inbox anzeigen (' + remaining + ')';
- }
- }
- // Toggle-Button einrichten
- function addToggleButton() {
- const remaining = maxViewsPerDay - views[today];
- toggleButton = document.createElement('button');
- toggleButton.innerText = 'Inbox anzeigen (' + remaining + ')';
- toggleButton.style.position = 'fixed';
- toggleButton.style.top = '10px';
- toggleButton.style.right = '10px';
- toggleButton.style.zIndex = '10001';
- toggleButton.style.padding = '8px';
- toggleButton.style.fontSize = '14px';
- toggleButton.style.backgroundColor = '#4285f4';
- toggleButton.style.color = 'white';
- toggleButton.style.border = 'none';
- toggleButton.style.borderRadius = '4px';
- toggleButton.style.cursor = 'pointer';
- toggleButton.onclick = () => {
- // Nur auf Nicht-Suchseiten
- if (manualViewActive) {
- deactivateManualView();
- } else {
- activateManualView();
- }
- };
- document.body.appendChild(toggleButton);
- updateToggleButton();
- }
- // Bei Navigation: Wenn du in einer Suchseite landest, aktiviere Suchmodus.
- // Falls du in Nicht-Suchseiten navigierst, bleibt der manuelle View aktiv, wenn er bereits aktiviert wurde.
- window.addEventListener('hashchange', () => {
- if (isSearchUrl()) {
- activateSearchView();
- } else {
- // Wenn manueller View aktiv, beibehalten – ansonsten Inbox ausblenden
- if (!manualViewActive) {
- injectHideStyle();
- }
- updateToggleButton();
- }
- });
- // Direkt beim Skriptstart: Inbox ausblenden und Overlay einfügen
- injectHideStyle();
- injectOverlay();
- // Sobald die Seite fertig geladen ist, wird der Overlay entfernt (unabhängig vom Rest)
- window.addEventListener('load', () => {
- removeOverlay();
- addToggleButton();
- if (isSearchUrl()) {
- activateSearchView();
- } else {
- // Wenn kein manueller View aktiv ist, bleibt die Inbox ausgeblendet
- if (!manualViewActive) {
- injectHideStyle();
- }
- updateToggleButton();
- }
- });
- })();