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
+
+
+ Enable Ad Blocker
+
+
+
+
+
+
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();