2022年6月19日

ブラウザ環境、仕様

JavaScript言語は、当初ウェブブラウザ向けに作成されました。それ以来、多くの用途とプラットフォームを持つ言語へと進化しました。

プラットフォームとは、ブラウザ、ウェブサーバー、その他のホスト、あるいはJavaScriptを実行できる「スマート」なコーヒーメーカーなど、様々なものを指します。これらそれぞれは、プラットフォーム固有の機能を提供します。JavaScript仕様では、これをホスト環境と呼びます。

ホスト環境は、言語コアに加えて、独自のオブジェクトと関数を提供します。ウェブブラウザはウェブページを制御する手段を提供し、Node.jsはサーバーサイド機能を提供するなどします。

JavaScriptがウェブブラウザで実行されるときの概要を以下に示します。

windowと呼ばれる「ルート」オブジェクトがあります。これは2つの役割を持っています。

  1. まず、グローバルオブジェクトの章で説明されているように、JavaScriptコードのグローバルオブジェクトです。
  2. 次に、「ブラウザウィンドウ」を表し、それを制御するためのメソッドを提供します。

例えば、グローバルオブジェクトとして使用できます。

function sayHi() {
  alert("Hello");
}

// global functions are methods of the global object:
window.sayHi();

また、ブラウザウィンドウとして使用して、ウィンドウの高さを表示することもできます。

alert(window.innerHeight); // inner window height

他にもウィンドウ固有のメソッドやプロパティがありますが、これについては後で説明します。

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

ドキュメントオブジェクトモデル(略してDOM)は、変更可能なオブジェクトとしてすべてのページコンテンツを表します。

documentオブジェクトは、ページへの主な「エントリポイント」です。これを使用して、ページ上のあらゆるものを変更または作成できます。

例えば

// change the background color to red
document.body.style.background = "red";

// change it back after 1 second
setTimeout(() => document.body.style.background = "", 1000);

ここではdocument.body.styleを使用しましたが、他にも多くのものがあります。プロパティとメソッドは仕様に記載されています。DOM Living Standard.

DOMはブラウザだけのものではありません

DOM仕様は、ドキュメントの構造を説明し、それを操作するためのオブジェクトを提供します。DOMを使用するブラウザ以外のツールもあります。

例えば、HTMLページをダウンロードして処理するサーバーサイドスクリプトもDOMを使用できます。ただし、仕様の一部しかサポートしていない場合があります。

スタイルのためのCSSOM

CSSルールとスタイルシートについて説明する、CSSオブジェクトモデル(CSSOM)という別の仕様もあります。オブジェクトとしての表現方法、読み書き方法について説明しています。

CSSOMは、ドキュメントのスタイルルールを変更する場合にDOMと共に使用されます。しかし実際には、CSSルールをJavaScriptから変更する必要はほとんどないのでCSSOMはめったに必要ありません(通常はCSSルールを変更するのではなく、CSSクラスを追加または削除します)。ただし、それも可能です。

BOM(ブラウザオブジェクトモデル)

ブラウザオブジェクトモデル(BOM)は、ドキュメント以外のすべてを操作するためにブラウザ(ホスト環境)が提供する追加のオブジェクトを表します。

例えば

  • navigatorオブジェクトは、ブラウザとオペレーティングシステムに関する背景情報を提供します。多くのプロパティがありますが、最も広く知られている2つは、navigator.userAgent(現在のブラウザに関する情報)、navigator.platform(プラットフォームに関する情報、Windows/Linux/Macなどを区別するのに役立ちます)です。
  • locationオブジェクトを使用すると、現在のURLを読み取り、ブラウザを新しいURLにリダイレクトできます。

locationオブジェクトの使用方法を以下に示します。

alert(location.href); // shows current URL
if (confirm("Go to Wikipedia?")) {
  location.href = "https://wikipedia.org"; // redirect the browser to another URL
}

alert/confirm/prompt関数もBOMの一部です。ドキュメントに直接関連していませんが、ユーザーと通信するための純粋なブラウザメソッドを表します。

仕様

BOMは、一般的なHTML仕様の一部です。

そうです、あなたはそれを聞きました。 https://html.spec.whatwg.orgにあるHTML仕様は「HTML言語」(タグ、属性)に関するだけでなく、多くのオブジェクト、メソッド、ブラウザ固有のDOM拡張機能もカバーしています。「広義のHTML」です。また、一部にはhttps://spec.whatwg.orgに記載されている追加の仕様があります。

概要

標準について言うと、次のようなものがあります。

DOM仕様
ドキュメントの構造、操作、イベントについて説明しています。https://dom.spec.whatwg.orgをご覧ください。
CSSOM仕様
スタイルシートとスタイルルール、それらの操作、ドキュメントへのバインドについて説明しています。https://www.w3.org/TR/cssom-1/をご覧ください。
HTML仕様
HTML言語(例:タグ)とBOM(ブラウザオブジェクトモデル)について説明しています。様々なブラウザ関数:setTimeoutalertlocationなど。https://html.spec.whatwg.orgをご覧ください。DOM仕様を受け継ぎ、多くの追加のプロパティとメソッドを拡張しています。

さらに、一部のクラスはhttps://spec.whatwg.org/で個別に説明されています。

これらのリンクを控えておいてください。学ぶべきことが多すぎて、すべてを網羅して覚えることは不可能です。

プロパティやメソッドについて読みたい場合は、https://developer.mozilla.org/en-US/のMozillaマニュアルも優れたリソースですが、対応する仕様の方が優れている場合があります。読むのは複雑で時間がかかりますが、基礎知識をしっかりとしたものにすることができます。

何かを見つけるには、「WHATWG [用語]」または「MDN [用語]」でインターネット検索するのが便利な場合があります。例:https://google.com?q=whatwg+localstoragehttps://google.com?q=mdn+localstorage

それでは、ドキュメントがUIの中心的な役割を果たしているので、DOMの学習を始めましょう。

チュートリアルマップ

コメント

コメントする前にこれを読んでください…
  • 改善すべき点があれば、コメントする代わりにGitHub issueまたはプルリクエストを送信してください。
  • 記事の内容が理解できない場合は、詳しく説明してください。
  • コードを数行挿入するには<code>タグを使用し、複数行の場合は<pre>タグで囲み、10行を超える場合はサンドボックス(plnkrjsbincodepen…)を使用してください。