JavaScript言語は、当初ウェブブラウザ向けに作成されました。それ以来、多くの用途とプラットフォームを持つ言語へと進化しました。
プラットフォームとは、ブラウザ、ウェブサーバー、その他のホスト、あるいはJavaScriptを実行できる「スマート」なコーヒーメーカーなど、様々なものを指します。これらそれぞれは、プラットフォーム固有の機能を提供します。JavaScript仕様では、これをホスト環境と呼びます。
ホスト環境は、言語コアに加えて、独自のオブジェクトと関数を提供します。ウェブブラウザはウェブページを制御する手段を提供し、Node.jsはサーバーサイド機能を提供するなどします。
JavaScriptがウェブブラウザで実行されるときの概要を以下に示します。
window
と呼ばれる「ルート」オブジェクトがあります。これは2つの役割を持っています。
- まず、グローバルオブジェクトの章で説明されているように、JavaScriptコードのグローバルオブジェクトです。
- 次に、「ブラウザウィンドウ」を表し、それを制御するためのメソッドを提供します。
例えば、グローバルオブジェクトとして使用できます。
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を使用するブラウザ以外のツールもあります。
例えば、HTMLページをダウンロードして処理するサーバーサイドスクリプトもDOMを使用できます。ただし、仕様の一部しかサポートしていない場合があります。
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(ブラウザオブジェクトモデル)について説明しています。様々なブラウザ関数:
setTimeout
、alert
、location
など。https://html.spec.whatwg.orgをご覧ください。DOM仕様を受け継ぎ、多くの追加のプロパティとメソッドを拡張しています。
さらに、一部のクラスはhttps://spec.whatwg.org/で個別に説明されています。
これらのリンクを控えておいてください。学ぶべきことが多すぎて、すべてを網羅して覚えることは不可能です。
プロパティやメソッドについて読みたい場合は、https://developer.mozilla.org/en-US/のMozillaマニュアルも優れたリソースですが、対応する仕様の方が優れている場合があります。読むのは複雑で時間がかかりますが、基礎知識をしっかりとしたものにすることができます。
何かを見つけるには、「WHATWG [用語]」または「MDN [用語]」でインターネット検索するのが便利な場合があります。例:https://google.com?q=whatwg+localstorage、https://google.com?q=mdn+localstorage。
それでは、ドキュメントがUIの中心的な役割を果たしているので、DOMの学習を始めましょう。
コメント
<code>
タグを使用し、複数行の場合は<pre>
タグで囲み、10行を超える場合はサンドボックス(plnkr、jsbin、codepen…)を使用してください。