Adblock Plus 風のフィルタ記法(ドメイン##CSSセレクタ)で、任意のサイト上の要素を非表示にする Chrome 拡張機能です。
- Manifest V3 対応
- 初期フィルタなし(インストール直後は何も変化しない)
- options ページからフィルタを編集・保存
- 簡単に 1 行追加できるミニ UI 付き
- フィルタは
chrome.storage.syncに保存
element-hider/
├── manifest.json
├── content-script.js
├── options.html
└── options.js
- このリポジトリ(または element-hider ディレクトリ)を任意の場所に配置
- Chrome を開き、アドレスバーに
chrome://extensions/を入力 - 右上の「デベロッパーモード」をオン
- 「パッケージ化されていない拡張機能を読み込む」をクリック
- element-hider ディレクトリを選択
これで拡張がインストールされ、右上の拡張機能一覧に表示されます。
以下のどちらかの方法で開けます。
- Chrome 右上のパズルアイコン(拡張機能)をクリック
- 一覧から「Element Hider (ABP-style filters)」を探す
- 右側の︙などのメニューから「オプション」または「拡張機能のオプション」を選択
chrome://extensions/を開く- 「Element Hider (ABP-style filters)」のカードで「詳細」をクリック
- 中にある「拡張機能のオプション」をクリック
options ページには大きなテキストエリアがあります。
- 1 行につき 1 ルール
- 書式は
ドメイン##CSSセレクタ
例:
youtube.com##ytd-button-renderer[class="style-scope ytd-masthead"]
書き終えたら「保存(ブラウザに保存)」ボタンを押すと、内容が chrome.storage.sync に保存されます。
テキストエリアの下に、次のようなブロックがあります。
- 左側: 「適用するページのドメイン」
- 右側: 「一致するCSS」
- 中央: 固定文字列
## - ボタン: 「非表示にする」
使い方:
- 「適用するページのドメイン」に、対象ドメインを入力
- 例:
youtube.com - 空のままにすると
*とみなされ、全ドメインが対象になる
- 例:
- 「一致するCSS」に、CSS セレクタを入力
- 例:
ytd-button-renderer[class="style-scope ytd-masthead"]
- 例:
- 「非表示にする」ボタンを押す
すると、
ドメイン##CSSセレクタ形式の 1 行がテキストエリア末尾に追加される- 追加後の内容が
chrome.storage.syncに自動保存される
options ページには次のボタンがあります。
- 手元の
filters.txtなどのテキストファイルを読み込み - 中身をテキストエリアに反映
- 即座に
chrome.storage.syncに保存
- 現在のテキストエリアの内容を
filters.txtとしてダウンロード - 他の環境へのコピーやバックアップに利用可能
この拡張で対応しているのは、Adblock Plus 風記法のごく一部です。
domain##css-selector
例: youtube.com, example.org, *
- サブドメインにもマッチ
youtube.com→youtube.com,www.youtube.com,m.youtube.comなど
通常の CSS セレクタ
例:
div#header
ytd-button-renderer[class="style-scope ytd-masthead"]
! で始まる行はコメントとして無視されます。
! 作成ボタンを非表示
youtube.com##ytd-button-renderer[class="style-scope ytd-masthead"]
content-script.js は全ページで実行されますが、以下のように動作します。
chrome.storage.sync.filtersからフィルタ文字列を取得- 1 行ずつ
domain##selectorとしてパース location.hostnameがdomainにマッチするルールだけを抽出- マッチするルールが 1 件もなければ、何もせず終了
- マッチしたルールがある場合、そのセレクタに対して
という CSS をまとめた
selector { display: none !important; }
<style data-element-hider="true">タグを 1 つ挿入
そのため、
- フィルタを書いていないドメインには一切影響を与えません
- フィルタが空の状態では、どのサイトにもスタイルは挿入されません
domainMatches() は次の条件でマッチ判定します。
- 完全一致:
ruleDomain === pageHost - サブドメイン:
pageHost.endsWith("." + ruleDomain)
例:
- ルール側が
youtube.comの場合youtube.com→ マッチwww.youtube.com→ マッチm.youtube.com→ マッチ
- ルール側が
*の場合- 特別扱いはしていないが、CSS 側で絞り込めば「全ドメイン対象」として運用できる
- 使用:
chrome.storage.sync - キー:
filters - 型: 1 つの長い文字列(複数行のテキスト)
- permissions:
storageのみ - host_permissions:
<all_urls>
全サイトの DOM にはアクセスするが、実際に DOM を変更するのはフィルタのドメインにマッチした場合のみ
- Adblock Plus の完全な記法サポートは行っていません
- 対応しているのは
domain##css-selectorとコメント行のみ
- 対応しているのは
- 極端に重い CSS セレクタや大量のルールを追加すると、特定サイトの表示が遅くなる可能性があります
- 動的に生成される要素でも、セレクタが CSS でマッチし続ける限り
display: none !important;が効きます
MIT License