diff --git a/README.md b/README.md index b0eaa79..8927f99 100644 --- a/README.md +++ b/README.md @@ -584,6 +584,17 @@ In order to run this project you need: +
  • +
    +Ads Blocker Extension +

    This is a simple Ad Blocker Extension. AdBlocker is a lightweight browser extension designed to block intrusive advertisements and enhance your browsing experience.

    + +
    +
  • +

    (back to top)

    diff --git a/Source-Code/AdsBlockerExtension/content.js b/Source-Code/AdsBlockerExtension/content.js new file mode 100644 index 0000000..7e719d8 --- /dev/null +++ b/Source-Code/AdsBlockerExtension/content.js @@ -0,0 +1,42 @@ +/* eslint-disable no-undef */ +const adSelectors = [ + 'iframe[src*="ads"]', + 'div[class*="ad"]', + 'div[id*="ad"]', + 'ins.adsbygoogle', + '[data-ad]', + '.ad-banner', +]; + +// Normalize domain +const normalizeDomain = (domain) => domain.replace(/^www\./, ''); + +chrome.storage.local.get( + { adBlockerEnabled: true, whitelist: [] }, + ({ adBlockerEnabled, whitelist }) => { + if (!adBlockerEnabled) return; + + const currentSite = normalizeDomain(window.location.hostname); + const normalizedWhitelist = whitelist.map(normalizeDomain); + + if (normalizedWhitelist.includes(currentSite)) { + console.log(`Whitelist active: Ads are allowed on ${currentSite}`); + return; // Skip ad blocking + } + + // Ad blocking logic + const blockAds = () => { + adSelectors.forEach((selector) => { + const ads = document.querySelectorAll(selector); + console.log(`Found ${ads.length} ads for selector: ${selector}`); + ads.forEach((ad) => ad.remove()); + }); + }; + + blockAds(); // Initial blocking + + // Observe dynamically loaded ads + const observer = new MutationObserver(blockAds); + observer.observe(document.body, { childList: true, subtree: true }); + }, +); diff --git a/Source-Code/AdsBlockerExtension/icons/icon128.png b/Source-Code/AdsBlockerExtension/icons/icon128.png new file mode 100644 index 0000000..fbebcc8 Binary files /dev/null and b/Source-Code/AdsBlockerExtension/icons/icon128.png differ diff --git a/Source-Code/AdsBlockerExtension/icons/icon16.png b/Source-Code/AdsBlockerExtension/icons/icon16.png new file mode 100644 index 0000000..d3a0408 Binary files /dev/null and b/Source-Code/AdsBlockerExtension/icons/icon16.png differ diff --git a/Source-Code/AdsBlockerExtension/icons/icon48.png b/Source-Code/AdsBlockerExtension/icons/icon48.png new file mode 100644 index 0000000..10d3a1f Binary files /dev/null and b/Source-Code/AdsBlockerExtension/icons/icon48.png differ diff --git a/Source-Code/AdsBlockerExtension/manifest.json b/Source-Code/AdsBlockerExtension/manifest.json new file mode 100644 index 0000000..3982ced --- /dev/null +++ b/Source-Code/AdsBlockerExtension/manifest.json @@ -0,0 +1,27 @@ +{ + "manifest_version": 2, + "name": "Ad Blocker", + "version": "1.0", + "description": "A simple ad blocker to remove advertisements from websites.", + "permissions": ["activeTab", "storage"], + "content_scripts": [ + { + "matches": [""], + "js": ["content.js"] + } + ], + "browser_action": { + "default_popup": "popup.html", + "default_icon": { + "16": "./icons/icon16.png", + "48": "./icons/icon48.png", + "128": "./icons/icon128.png" + } + }, + "icons": { + "16": "./icons/icon16.png", + "48": "./icons/icon48.png", + "128": "./icons/icon128.png" + } + } + \ No newline at end of file diff --git a/Source-Code/AdsBlockerExtension/popup.css b/Source-Code/AdsBlockerExtension/popup.css new file mode 100644 index 0000000..5ba01a8 --- /dev/null +++ b/Source-Code/AdsBlockerExtension/popup.css @@ -0,0 +1,34 @@ +body { + font-family: Arial, sans-serif; + margin: 10px; + width: 250px; +} + +h1 { + font-size: 1.5em; + margin-bottom: 10px; +} + +label { + display: block; + margin-bottom: 20px; +} + +input { + margin-right: 10px; +} + +ul { + list-style-type: none; + padding: 0; +} + +li { + margin: 5px 0; + display: flex; + justify-content: space-between; +} + +button { + cursor: pointer; +} diff --git a/Source-Code/AdsBlockerExtension/popup.html b/Source-Code/AdsBlockerExtension/popup.html new file mode 100644 index 0000000..de88f92 --- /dev/null +++ b/Source-Code/AdsBlockerExtension/popup.html @@ -0,0 +1,24 @@ + + + + + + Ad Blocker + + + +

    Ad Blocker

    + +
    +

    Whitelist

    + + + +
    +

    + + + diff --git a/Source-Code/AdsBlockerExtension/popup.js b/Source-Code/AdsBlockerExtension/popup.js new file mode 100644 index 0000000..2a544a6 --- /dev/null +++ b/Source-Code/AdsBlockerExtension/popup.js @@ -0,0 +1,34 @@ +const whitelistInput = document.getElementById('whitelist-input'); +const addToWhitelist = document.getElementById('add-to-whitelist'); +const whitelist = document.getElementById('whitelist'); +let whitelistData = JSON.parse(localStorage.getItem('whitelist')) || []; + +// Load whitelist +function loadWhitelist() { + whitelist.innerHTML = ''; + whitelistData.forEach((site) => { + const li = document.createElement('li'); + li.textContent = site; + const removeBtn = document.createElement('button'); + removeBtn.textContent = 'Remove'; + removeBtn.addEventListener('click', () => { + whitelistData = whitelistData.filter((item) => item !== site); + localStorage.setItem('whitelist', JSON.stringify(whitelistData)); + loadWhitelist(); + }); + li.appendChild(removeBtn); + whitelist.appendChild(li); + }); +} + +addToWhitelist.addEventListener('click', () => { + const site = whitelistInput.value.trim(); + if (site && !whitelistData.includes(site)) { + whitelistData.push(site); + localStorage.setItem('whitelist', JSON.stringify(whitelistData)); + whitelistInput.value = ''; + loadWhitelist(); + } +}); + +loadWhitelist();