ブラウザオブジェクト入門|JavaScriptで「ブラウザ自身」を操作する世界へ

3 min 38 views
browser-javascript

前回の記事では、言語そのものに備わっている「組み込みオブジェクト(Built-in Objects)」を学びました。
今回は、JavaScriptが“実行される環境”、つまり ブラウザそのものを操作できる世界 に足を踏み入れます。

この世界では、例えば:

  • 「現在のURL」を取得・変更できる
  • 「閲覧履歴」を操作できる
  • 「ブラウザ情報(ユーザーの環境)」を得られる

これらはすべて BOM(Browser Object Model) と呼ばれる仕組みの一部です。
JavaScriptで“ただウェブページを操作する”だけでなく、“そのウェブページが動いているブラウザを操作する”“環境を読み取る”というステップに進むための知識です。

 1-1. 概念整理

  • 通常、JavaScriptではページ中のHTMLを操作するために Document Object Model(DOM) を使います。
  • しかし、ブラウザが提供する「ページ外の情報」「ブラウザ内の機能」も含めて操作できるのがBOMです。
  • BOMに公式の仕様があるわけではなく、ブラウザごとに若干差異があります。ウィキペディア

 1-2. 全体像

window
├─ navigator
├─ location
├─ history
├─ screen
└─ … 他ブラウザ機能オブジェクト

すべてのBOMオブジェクトは最上位の window オブジェクトの下にあります。

 2-1. window – 全ての入り口

console.log(window.innerWidth, window.innerHeight); // ビューポートのサイズ
alert("JavaScriptからの挨拶");                        // ダイアログを表示
  • window は最上位のオブジェクトで、グローバル変数や関数も実は window のプロパティ・メソッドです。
  • 実務では、画面の幅・高さを取得してレスポンシブ処理を行ったり、ポップアップ制御・タブ操作を実装したりします。

 2-2. navigator – ユーザーの環境を知る

console.log(navigator.userAgent);     // ブラウザの識別文字列
console.log(navigator.language);      // ブラウザ設定の言語
console.log(navigator.onLine);        // オンラインかどうか
  • ユーザーのブラウザ・OS・言語などの情報を取得できます。
  • ただし、「ブラウザ判定」に頼りすぎると非互換性の原因になるため、機能検出(feature detection)が推奨されます。

 2-3. location – URLを読む・変える

console.log(location.href);            // 現在のURL
location.href = "https://example.com"; // ページ移動
console.log(location.search);          // クエリ文字列(?key=...)
  • URLの情報を取得・書き換えでき、シングルページアプリ(SPA)では履歴操作と併せて活躍します。
  • location.replace() を使えば「履歴を残さずリダイレクト」が可能。

 2-4. history – 履歴操作

history.back();   // 前のページへ
history.forward(); 
history.go(-2);   // 2つ前へ
  • Webアプリで「戻る/進む」を制御したり、SPAでURLは変わるがページ遷移に見せない場合にも使われます。

 2-5. screen – 画面情報を取得

console.log(screen.width, screen.height); // 画面解像度
  • レイアウトの最適化や、大きな画面・小さな画面で表示を変える際に利用されます。

 3-1. モバイル/タブレット判定によるUI切り替え

if (navigator.userAgent.match(/Mobi|Android/i)) {
  document.body.classList.add("is-mobile");
}

 3-2. URLクエリを読み取ってページを変える

const params = new URLSearchParams(location.search);
const mode = params.get("mode");
if (mode === "dark") {
  document.body.classList.add("theme-dark");
}

 3-3. 履歴を使った「戻る用ボタン」実装

document.getElementById("btn-back").addEventListener("click", () => {
  if (history.length > 1) {
    history.back();
  } else {
    location.href = "/";
  }
});
  • window を省略しても動くが、背後で window のプロパティとして扱われていることを意識する。
  • ユーザーエージェント(navigator.userAgent)だけでブラウザ判定をしない。将来的な非互換の原因になります。
  • SPAやモバイル対応では、history.pushStatereplaceStatelocation の使い方を知ることが重要
  • 画面幅を判定してレイアウトを切り替える場合、CSSメディアクエリと併用する方が一貫性がある

BOMを使いこなせるようになると、ブラウザそのものの環境が読めて・制御できるようになります。


次はいよいよ、ページ内の HTML要素を動的に操作する「DOM(Document Object Model)」の世界 へ進みます。

関連記事