- // ==UserScript==
- // @name Robust Popup Blocker with Whitelist
- // @namespace http://tampermonkey.net/
- // @version 1.0
- // @description Blocks all popups unless they originate from a whitelisted domain, with enhanced handling.
- // @author Your Name
- // @match *://*/*
- // @grant none
- // @run-at document-start
- // @license MIT
- // ==/UserScript==
-
- (function() {
- 'use strict';
-
- // List of trusted websites or domains where redirects are allowed
- const whitelist = [
- '500px.com',
- 'adobe.com',
- 'amazon.com',
- 'apple.com',
- 'archlinux.org',
- 'arstechnica.com',
- 'artstation.com',
- 'asana.com',
- 'atlassian.com',
- 'axios.com',
- 'battle.net',
- 'bbc.com',
- 'behance.net',
- 'bestbuy.com',
- 'blogger.com',
- 'booking.com',
- 'buzzfeed.com',
- 'canva.com',
- 'cnn.com',
- 'codecademy.com',
- 'constantcontact.com',
- 'coursera.org',
- 'deviantart.com',
- 'discord.com',
- 'docusign.com',
- 'dribbble.com',
- 'dropbox.com',
- 'duolingo.com',
- 'ebay.com',
- 'edx.org',
- 'engadget.com',
- 'epicgames.com',
- 'etsy.com',
- 'eurogamer.net',
- 'facebook.com',
- 'figma.com',
- 'flickr.com',
- 'forbes.com',
- 'framer.com',
- 'freecodecamp.org',
- 'gamespot.com',
- 'gettyimages.com',
- 'github.com',
- 'gizmodo.com',
- 'gog.com',
- 'hubspot.com',
- 'huffpost.com',
- 'humblebundle.com',
- 'ign.com',
- 'ikea.com',
- 'imdb.com',
- 'imgur.com',
- 'instagram.com',
- 'intuit.com',
- 'invisionapp.com',
- 'itch.io',
- 'khanacademy.org',
- 'kotaku.com',
- 'lifehacker.com',
- 'linkedin.com',
- 'lynda.com',
- 'mailchimp.com',
- 'mashable.com',
- 'masterclass.com',
- 'medium.com',
- 'microsoft.com',
- 'mozilla.org',
- 'msn.com',
- 'netflix.com',
- 'nytimes.com',
- 'origin.com',
- 'paypal.com',
- 'pcgamer.com',
- 'pexels.com',
- 'pinterest.com',
- 'pixabay.com',
- 'pluralsight.com',
- 'polygon.com',
- 'quora.com',
- 'reddit.com',
- 'salesforce.com',
- 'samsung.com',
- 'shutterstock.com',
- 'sketch.com',
- 'skillshare.com',
- 'skype.com',
- 'slack.com',
- 'somegit.dev',
- 'soundcloud.com',
- 'spotify.com',
- 'stackoverflow.com',
- 'steamcommunity.com',
- 'surveymonkey.com',
- 'target.com',
- 'techcrunch.com',
- 'theguardian.com',
- 'theverge.com',
- 'tiktok.com',
- 'trello.com',
- 'tripadvisor.com',
- 'tumblr.com',
- 'twitch.tv',
- 'twitter.com',
- 'udemy.com',
- 'unsplash.com',
- 'Vice.com',
- 'vimeo.com',
- 'vk.com',
- 'vox.com',
- 'walmart.com',
- 'washingtonpost.com',
- 'whatsapp.com',
- 'wikimedia.org',
- 'wikipedia.org',
- 'wired.com',
- 'wordpress.com',
- 'wsj.com',
- 'yahoo.com',
- 'yelp.com',
- 'youtube.com',
- 'zapier.com',
- 'zendesk.com',
- 'zeplin.io',
- 'zoom.us',
- 'google.com',
- 'wiki.archlinux.org'
- // Add more trusted websites or domains here
- ];
-
- function isWhitelisted(url) {
- try {
- const hostname = new URL(url).hostname;
- return whitelist.some(domain => hostname === domain || hostname.endsWith('.' + domain));
- } catch (e) {
- console.error('Error checking whitelist:', e);
- return false;
- }
- }
-
- const originalOpen = window.open;
- window.open = function(url, name, features) {
- if (!url || isWhitelisted(url)) {
- return originalOpen.call(this, url, name, features);
- } else {
- console.log('Blocked popup from:', url);
- return null;
- }
- };
-
- // Disable other known methods to open a window
- window.alert = window.confirm = window.prompt = function() {
- console.log('Blocked suspicious popup interaction');
- return null;
- };
-
- // Observe and handle inline event triggers
- document.addEventListener('DOMContentLoaded', () => {
- const allElements = document.querySelectorAll('body *');
- allElements.forEach(el => {
- const isInlinePopup = el.getAttribute('onclick')?.includes('window.open');
- if (isInlinePopup) {
- el.removeAttribute('onclick');
- console.log('Removed inline popup trigger from element:', el);
- }
- });
- });
-
- console.log('Popup blocker initialized.');
- })();