0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

初心者のブラウザ拡張機能Advent Calendar 2024

Day 4

ブラウザ拡張機能でページの要素を変えたいと思ったときにやること

Last updated at Posted at 2024-12-03

概要

これは初心者のブラウザ拡張機能 Advent Calendar 2024の4日目の記事です。

「ブラウザの拡張機能を使ってあるページの要素を変えたいな」と思ったときにどういう手順で調べて変えたら良いのか、ざっくり流れを書いてみます。

まず知っておいたほうが良いこと

どんな要素も変えられること

Webページは Document Object Model(DOM) というAPIによって操作されます。ブラウザの拡張機能では、このDOMというインターフェイスに接続してWebページを操作するため、たとえば真っ白な画面にしてしまうようなことも可能です。

HTMLはツリー構造になっていること

HTML文書をブラウザが解釈してWebページとして表示するとき、ブラウザはDOMツリーを作ります。

ある要素を変えるときはツリーのどこを変えているのか意識する必要があります。そうでないと想定外の挙動になったり、なにも変化しなかったりします。

DOM ツリーとは?

DOMをなんとなく知っておくこと

まとめてしまえば「DOMを知ろう!」ということです。

単純にHTMLのタグやタグのオプションを操作するわけではなく、操作するのはDOM(インターフェイス)です。

そのためDOMとはなにで、どういう役割を担っているのか知りましょう。
Mozillaのサイトがわかりやすく正確です。

ドキュメントオブジェクトモデル (DOM)

変えたい要素を調べる方法

ページから要素を選択する

本題に入ります。
「この要素変えたいな」と思ったらまずはブラウザの開発者ツールを開きます。
F12キーCtrl+Shift+Iなどで開けます。

開いたら下記画像の赤矢印を選択します。ページから要素を選択する機能です。

ページから要素を選択

これを使うとWebページの特定部分を選択して、その要素が何なのか確認できます。
下記画像はQiitaのいいねボタンを調べているときのものです。

いいねボタン

クリックするとインスペクターというタブの該当部分がハイライトされます。
いいねボタンは以下要素であると確認できました。

<button aria-label="いいねする" aria-pressed="false" title="いいねする" disabled="" class="style-10ttvi6"></button>

要素周辺を確認する

次にその要素周辺の構造を調べます。
さきほどの例で言えばbutton要素の上になにがあるか確認する、ということです。

<div>
  <div>
    <svg>
  </div>
  <button>
</div>

Qiitaのいいねボタンは上記のようにdivタグが上にあります。またbuttonと同じ階層にもdivがありました。

もっと上位の階層までさかのぼる場合はXPathをコピーします。
右クリックしてコピーからXPathをクリックします。

XPATH

以下のようにルートから現在の要素までの各要素が取得できます。

/html/body/div[1]/div[3]/div/main/section/div[1]/div[1]/button

要素を変える方法

querySelector

変えたい要素が見つかったらdocument.querySelectorで取得します。

Qiitaのいいねボタンの場合、さきほどのXPathを活用して以下のように取得できます。

const b = document.querySelector("body div div div main section div div button")

もしくはCSSのクラス名からも取得できます。

const b = document.querySelector("button.style-10ttvi6") 

querySelectorの構文はタグ名もしくはタグ名.クラス名クラス名です。これらを組み合わせて目的の要素を特定します。

querySelectorAll

もし変えたい要素が複数ある場合はquerySelectorAllを使います。
たとえばすべてのpタグを取得する場合は以下のようにします。

const ptags = document.querySelectorAll("p")

配列のような形式で取得されるため、それぞれの要素へアクセスするためにForEachを使います

const ptags = document.querySelectorAll("p")
ptags.forEach(ptag => {
    // ここで処理
});

styleで要素を変える

querySelectorもしくはquerySelectorAllで要素を取得したら、styleを使って要素を変えます。

たとえば以下はh1タグの背景色を赤色にします。

const h1tags = document.querySelectorAll("h1");
h1tags.forEach(h1tag => {
    h1tag.style.backgroundColor = "red";
})

styleを更新する場合はelement.style.hogehoge = hugahugaという形で更新します。

HTMLElement: style プロパティ

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?