您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Disables tracking in Gmail and Outlook by blocking images and JavaScript in email content areas
当前为
- // ==UserScript==
- // @name Gmail & Outlook Image n Javascript Disabler
- // @namespace http://tampermonkey.net/
- // @version 1.0
- // @description Disables tracking in Gmail and Outlook by blocking images and JavaScript in email content areas
- // @author Minoa
- // @match https://mail.google.com/*
- // @match https://outlook.office365.com/*
- // @grant none
- // @license MIT
- // ==/UserScript==
- (function() {
- 'use strict';
- // Configuration for different email clients
- const CONFIG = {
- gmail: {
- container: '.AO .Tm.aeJ',
- observer: true
- },
- outlook: {
- container: '#ConversationReadingPaneContainer.MtujV',
- observer: true
- }
- };
- // CSS to block images and iframes
- const style = document.createElement('style');
- style.textContent = `
- /* Gmail - only target elements within email content */
- .AO .Tm.aeJ .a3s img,
- .AO .Tm.aeJ .a3s iframe,
- .AO .Tm.aeJ .a3s script,
- .AO .Tm.aeJ .a3s [style*="background-image"] {
- display: none !important;
- }
- .AO .Tm.aeJ .a3s [style*="background"] {
- background-image: none !important;
- }
- /* Outlook - only target elements within email content */
- #ConversationReadingPaneContainer.MtujV .allowTextSelection img,
- #ConversationReadingPaneContainer.MtujV .allowTextSelection iframe,
- #ConversationReadingPaneContainer.MtujV .allowTextSelection script,
- #ConversationReadingPaneContainer.MtujV .allowTextSelection [style*="background-image"] {
- display: none !important;
- }
- #ConversationReadingPaneContainer.MtujV .allowTextSelection [style*="background"] {
- background-image: none !important;
- }
- /* Placeholder for blocked content */
- .blocked-content-placeholder {
- display: inline-block;
- padding: 5px 10px;
- background: #f1f1f1;
- border: 1px solid #ddd;
- border-radius: 3px;
- color: #666;
- font-size: 12px;
- margin: 5px 0;
- cursor: pointer;
- transition: background-color 0.2s ease;
- }
- .blocked-content-placeholder:hover {
- background: #e5e5e5;
- }
- `;
- document.head.appendChild(style);
- // Function to process elements and block content
- function processElement(element) {
- if (!element) return;
- // Remove all script tags
- element.querySelectorAll('script').forEach(script => script.remove());
- // Replace images with placeholders
- element.querySelectorAll('img').forEach(img => {
- const placeholder = document.createElement('div');
- placeholder.className = 'blocked-content-placeholder';
- placeholder.textContent = '🖼️';
- placeholder.dataset.originalSrc = img.src;
- placeholder.addEventListener('click', function() {
- if (this.classList.contains('unblocked')) {
- this.textContent = '🖼️';
- this.classList.remove('unblocked');
- } else {
- const img = document.createElement('img');
- img.src = this.dataset.originalSrc;
- this.textContent = '';
- this.appendChild(img);
- this.classList.add('unblocked');
- }
- });
- img.parentNode.replaceChild(placeholder, img);
- });
- // Remove background images from elements
- element.querySelectorAll('[style*="background"]').forEach(el => {
- if (!el.dataset.originalBackground) {
- el.dataset.originalBackground = el.style.backgroundImage;
- }
- el.style.backgroundImage = 'none';
- if (!el.classList.contains('blocked-content-placeholder')) {
- el.addEventListener('click', function() {
- if (this.classList.contains('unblocked')) {
- this.style.backgroundImage = 'none';
- this.classList.remove('unblocked');
- } else {
- this.style.backgroundImage = this.dataset.originalBackground;
- this.classList.add('unblocked');
- }
- });
- }
- });
- // Handle iframes
- element.querySelectorAll('iframe').forEach(iframe => {
- const placeholder = document.createElement('div');
- placeholder.className = 'blocked-content-placeholder';
- placeholder.textContent = '🔲 Frame';
- placeholder.dataset.originalSrc = iframe.src;
- placeholder.addEventListener('click', function() {
- if (this.classList.contains('unblocked')) {
- this.textContent = '🔲 Frame';
- this.classList.remove('unblocked');
- } else {
- const iframe = document.createElement('iframe');
- iframe.src = this.dataset.originalSrc;
- this.textContent = '';
- this.appendChild(iframe);
- this.classList.add('unblocked');
- }
- });
- iframe.parentNode.replaceChild(placeholder, iframe);
- });
- }
- // Function to initialize observers
- function initializeObserver(config) {
- const observer = new MutationObserver((mutations) => {
- mutations.forEach(mutation => {
- if (mutation.type === 'childList') {
- processElement(mutation.target);
- }
- });
- });
- // Start observing the container
- const container = document.querySelector(config.container);
- if (container) {
- processElement(container);
- observer.observe(container, {
- childList: true,
- subtree: true
- });
- }
- return observer;
- }
- // Initialize based on current page
- let currentConfig;
- if (window.location.hostname.includes('mail.google.com')) {
- currentConfig = CONFIG.gmail;
- } else if (window.location.hostname.includes('outlook.office365.com')) {
- currentConfig = CONFIG.outlook;
- }
- if (currentConfig) {
- // Initial processing
- const container = document.querySelector(currentConfig.container);
- if (container) {
- processElement(container);
- }
- // Set up observer for dynamic content
- if (currentConfig.observer) {
- // Wait for the container to be available
- const checkContainer = setInterval(() => {
- const container = document.querySelector(currentConfig.container);
- if (container) {
- clearInterval(checkContainer);
- initializeObserver(currentConfig);
- }
- }, 1000);
- // Clear interval after 30 seconds to prevent infinite checking
- setTimeout(() => clearInterval(checkContainer), 30000);
- }
- }
- })();
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址