{"id":16842938,"url":"https://github.com/oslego/chrome-overlay-blocker","last_synced_at":"2026-04-16T11:01:34.859Z","repository":{"id":66867227,"uuid":"100166208","full_name":"oslego/chrome-overlay-blocker","owner":"oslego","description":"Experimental Google Chrome extension that attempts to block full page overlays.","archived":false,"fork":false,"pushed_at":"2017-08-13T10:02:29.000Z","size":4,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-10-26T23:34:21.090Z","etag":null,"topics":["chrome-extension","chrome-extensions","web-extension","web-extensions"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/oslego.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2017-08-13T09:19:47.000Z","updated_at":"2017-08-22T14:13:38.000Z","dependencies_parsed_at":"2023-07-27T02:47:16.883Z","dependency_job_id":null,"html_url":"https://github.com/oslego/chrome-overlay-blocker","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/oslego/chrome-overlay-blocker","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oslego%2Fchrome-overlay-blocker","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oslego%2Fchrome-overlay-blocker/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oslego%2Fchrome-overlay-blocker/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oslego%2Fchrome-overlay-blocker/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/oslego","download_url":"https://codeload.github.com/oslego/chrome-overlay-blocker/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oslego%2Fchrome-overlay-blocker/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31882886,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-16T09:23:21.276Z","status":"ssl_error","status_checked_at":"2026-04-16T09:23:15.028Z","response_time":69,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["chrome-extension","chrome-extensions","web-extension","web-extensions"],"created_at":"2024-10-13T12:49:05.202Z","updated_at":"2026-04-16T11:01:34.805Z","avatar_url":"https://github.com/oslego.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Overlay Blocker\n\nAn experimental browser extension for Google Chrome which attempts to block annoying full-page overlays, like ads and newsletter signup forms, from interrupting your browsing.\n\n**This is still a proof of concept. It will fail to identify and block some overlays.** Please [open an issue](https://github.com/oslego/chrome-overlay-blocker/issues) mentioning the URL where it failed so I can try to improve it.\n\n## How do I know it works?\n\nWhen the extension identifies an element which is _likely_ to be an overlay, it removes it from the page and logs it in the browser console like this:\n\n```html\n[Overlay Blocker extension]\nRemoved:\n \u003cdiv class=​\"overlay\"\u003e​\u003c/div\u003e​\n```\n\nYou can test it against the `index.html` file provided in this repository.\n\n## How to install\n\n- clone or download this repository\n\n```\ngit clone git@github.com:oslego/chrome-overlay-blocker.git\n```\n\n- navigate to `chrome://extensions` in Google Chrome\n- tick the checkbox labeled _Developer mode_\n- click _Load unpacked extension_\n- browse to the cloned repository folder and press _Select_.\n\n## How it works\n\nDocument-wide [`MutationObservers`](https://developer.mozilla.org/en/docs/Web/API/MutationObserver) are expensive. This experiment injects a stylesheet (at `document_idle`) which applies a noop CSS Animation to all elements that have a `class` or `style` attribute. This **will not** immediately animate all elements on the page. Read on.\n\nThe script listens to `animationstart` events then does element hit testing on the page. If it identifies an element with a large surface, it checks to see if it's `position: fixed` and if yes, it removes it.\n\nThe quirk exploited here is that `animationstart` will trigger only on elements that change from `display: hidden` to `display: block` _after_ the initial page load. This is thanks to the noop CSS Animation styles being injected by the content script at `document_idle`.\n\nThere's a built-in mechanism to pause detection for overlays that may have appeared as a result of user interaction (click, keydown, etc.). This _should_ prevent accidental removal of large menus, expected modals, etc.\n\nChecking for CSS `position: fixed` is expensive because it requires a call to `window.getComputedStyle()`. This is kept to a minimum because frequent calls will substantially degrade performance. Hit testing is employed to reduce the number of elements checked. This is the extension's major limitation at this time. Overlays with a small surface or overlays not nested within their \"backdrop\" element (the one that masks the page) may be missed.\n\nIf you have a better idea for a performant way to check if an element is an overlay, please let me know. Open an issue or submit a pull request.\n\n## Caveats\n This experimental extension:\n - _may_ break CSS animations on pages\n - _may_ negatively impact performance on complex pages that do **a lot** of DOM manipulation. If so, disable it, retry, and open an issue with the URL where it substantially impacted performance.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Foslego%2Fchrome-overlay-blocker","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Foslego%2Fchrome-overlay-blocker","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Foslego%2Fchrome-overlay-blocker/lists"}