BOM - Browser Object Model

Neben dem DOM (Document Object Model) gibt es auch ein BOM das Browser-Object-Model.

Bei dem Browser-Object-Model handelt es sich um eine API, über die wir Zugriff auf Informationen des Browsers erhalten. Das BOM beginnt am window-Object, dieser Startpunkt ist der einzelne Tab im Browser, das kennen wir bereits vom DOM. Der Startpunkt ist derselbe, das bedeutet, dass wir an Stelle von "document" auch "window.document" schreiben könnten, es würde auf das gleiche Objekt verweisen. Auch die Standartobjekte: Array, Function oder Object sind Eigenschaften des window-Object. Das Window-Objekt ist nicht nur der Einstiegspunkt für das DOM oder BOM, sondern auch diverser anderer API´s.


Die Größe und Position des Browserfensters ermitteln

Bei der Bestimmung von Position und Größe des Browserfensters gibt es eine ganze Reihe an Eigenschaften. Die Eigenschaften "outerHeight" und "outerWidth" stehen für die Höhe und die Breite des Browserfensters inklusive aller Browserleisten.

Gesamte Browsergröße

console.log(window.outerHeight); // Gesamte Browserhöhe
console.log(window.outerWidth); // Gesamte Browserbreite

Die Eigenschaften "innerHeight" und "innerWidth" stehen für die Höhe und Breite ohne Browserleisten, aber mit Scrollleisten.

Innere Browsergröße

console.log(window.innerHeight); // Innere Browserhöhe
console.log(window.innerWidth); // Innere Browserbreite

Über die Eigenschaften "screenX" und "screenY" erfahren wir, wo sich das Browserfenster am Bildschirm befindet.

Position vom Browserfenster

console.log(window.screenX); // Horizontale Position des Browserfensters
console.log(window.screenY); // Vertikale Position des Browserfensters

Über die Eigenschaften "scrollX" und "scrollY" erfahren wir, wie weit der Inhalt gescrollt wurde, alternativ dazu gibt es die Eigenschaften "pageXOffset" und "pageYOffset".

Scrollstatus im Browserfenster

console.log(window.scrollX); // Horizontal gescrollt
console.log(window.scrollY); // Vertikal gescrollt
console.log(window.pageXOffset); // Horizontal gescrollt
console.log(window.pageYOffset); // Vertikal gescrollt

Die Größe und Position des Browserfensters ändern

Dazu erstellen wir einfach ein neues Fenster mit der Methode "window.open()"

Neues Browserfenster erstellen

neuesFenster = window.open('', '', 'width=300, height=250');

Die Methode "window.open()" erwartet 3 Argumente. Das erste Argument ist die URL des neuen Fensters. Das zweite Argument ist der Name des neuen Fensters (nicht der Name von der Webseite). Über ein drittes Argument kann aussehen und verhalten des neuen Fensters beeinflusst werden. Dabei werden Wertepaare in Form von Zeichenketten übermittelt, mehrere Eigenschaftspaare werden mit Komma voneinander getrennt.


Fenster verschieben

Über die Methode "moveBy()" lässt sich ein Browserfenster um eine bestimmte Pixelanzahl verschieben.

Neues Browserfenster erstellen

neuesFenster = window.moveBy(100, 100);

Fenster fokussieren

Um das versetzte Fenster im Vordergrund zu behalten, verwenden wir die Methode "focus()".

Browserfenster verschieben

neuesFenster = window.focus();

Fenster skalieren

Mit der Methode "resizeBy()" können wir das Browserfenster um einen bestimmten Faktor skalieren.

Browserfenster dimensionieren

neuesFenster = window.resizeBy(50, -20);

Mit der Methode "resizeTo()" können wir das Browserfenster auf eine bestimmte Größe skalieren.

Browserfenster skalieren

neuesFenster = window.resizeTo(400, 200);

Fensterinhalt scrollen

Die Methode "scrollTo()" scrollt den Inhalt zu einer bestimmten Position.

Inhalt im Browserfenster positionieren

neuesFenster = window.scrollTo(200, 100);

Die Methode "scrollBy()" scrollt den Inhalt um eine bestimmte Anzahl von Pixel.

Inhalt vom Browserfenster scrollen

neuesFenster = window.scrollBy(100, 50);

Fenster schließen

Neben der Option, über JavaScript ein neues Browserfenster zu öffnen und zu verändern, sind wir auch in der Lage, dieses Browserfenster zu schließen.

Browserfenster schließen

neuesFenster = window.close();

Auf Anzeigeinformationen der Browserleiste zugreifen

Das Browserfenster besteht aus verschiedenen Komponenten. Darunter zählen die Adressleiste, die Menüleiste, die Werkzeugleiste, die Scrollleisten und noch ein paar andere Leisten, die Status und persönliche Add-ons anzeigen. Wir können mit verschiedenen Eigenschaften prüfen, ob bestimmte Leisten eingeblendet werden oder nicht.


Dialoge öffnen

Um mit dem Benutzer ein Dialog zu starten, gibt es in JavaScript verschiedene Methoden.


Meldungen

Mit der Methode "alert()" werden einfache Meldungen über ein zusätzliches Fenster ausgegeben.

Meldung mit alert ausgeben

alert('Meldungen ausgeben');

Meldungen

Die Methode "confirm()" öffnet einen Dialog mit einer Meldung, die zur Abfrage dienen soll. Der Rückgabewert von "confirm()" ist entweder "true" oder "false".

Zustimmung einholen

confirm('Zustimmung einholen');

Eingabe

Über die Methode "prompt()" wird ein Dialogfenster geöffnet, in dem der Benutzer Text eingeben kann. Der Rückgabewert der Methode "prompt()" ist der Text, der vom Benutzer eingegeben wurde oder "null", wenn keine Eingabe erfolgt ist.

Eingabefeld für Benutzereingabe

prompt('Werte abfragen');

Drucken

Der Dialog muss nicht zwangsweise über den Bildschirm erfolgen. Mit der Methode "print()" wird das Druckmenü geöffnet, um die Webseite auszudrucken.

Druckmenü öffnen

print();

Funktionen zeitgesteuert ausführen

Um Funktionen zeitgesteuert ausführen zu können, stehen uns zwei Helfermethoden zur Verfügung.

Interval

"setInterval()" führt eine Aktion in bestimmten Zeitabständen aus.

Zeitgesteuerte Funktion

ausgabe = window.setInterval(function() {
 console.log('Zeitgesteuerte Ausgabe');
}, 3000);

Sobald die Methode aufgerufen wird, erfolgt alle 3 Sekunden also alle 3000 Millisekunden die Ausgabe "Zeitgesteuerte Ausgabe" in der Konsole. Um die Ausgaben zu stoppen, verwenden wir die Methode "clearInterval()". "clearInterval()" benötigt einen eindeutigen Parameter, um auch den korrekten Intervall zu stoppen.

Zeitgesteuerte Funktion beenden

clearInterval(ausgabe);

Timeout

"setTimeout()" führt eine Aktion nach einem bestimmten Zeitraum aus. Die Methode "setTimeout()" erwartet als erstes Argument eine anonyme Funktion oder den Namen einer Funktion, die ausgeführt werden soll. Als zweites Argument wird der Zeitraum in Millisekunden angegeben, bis die Funktion aufgerufen werden soll.

Zeitgesteuerte Funktion

ausgabe = window.setTimeout(function() {
 console.log('Zeitgesteuerte Ausgabe');
}, 3000);

In der Konsole wird nun einmalig nach 3000 Millisekunden die zeitgesteuerte Ausgabe ausgegeben. Um diese Ausgabe zu verhindern, verwenden wir die Methode "clearTimeout()".

Zeitgesteuerte Funktion unterbinden

clearTimeout(ausgabe);

Bei der Methode "setTimeout()" wird eine Funktion einmalig nach einer bestimmten Zeit aufgerufen. Bei der Methode "setInterval()" wird hingegen nach Ablauf einer bestimmten Zeit immer wieder eine Funktion aufgerufen.


Auf Navigationsinformationen der aktuellen Webseite zugreifen

Der Zugriff auf die Navigationsinformationen erfolgt über die Eigenschaft "location".

Auf einzelne Bestandteile der URL zugreifen

Eine URL besteht aus verschiedenen Bestandteilen. Beginnend mit dem Protokoll (https://), gefolgt vom Hostname (www.webseite.de). Darauf folgt die Portangabe oder eine Pfadangabe bis hin zum Dateiname. Manchmal hängen dann noch ein paar Informationen hinten dran, das sind dann die Queryparameter.

Bestandteile der URL

Die Eigenschaft "href" enthält die gesamte URL.

URL-Informationen ausgeben lassen

location.href;

Die Eigenschaft "protocol" enthält das Protokoll der URL mit dem Doppelpunkt.

URL-Informationen ausgeben lassen

location.protocol;

Die Eigenschaft "host" enthält den Hostname der URL. Wenn eine Portangabe vorhanden ist, wird auch dieser mit angegeben.

URL-Informationen ausgeben lassen

location.host;

Die Eigenschaft "hostname" enthält den Hostname der URL. Hier gibt es keine Portangabe.

URL-Informationen ausgeben lassen

location.hostname;

"port" enthält den Port einer URL.

URL-Informationen ausgeben lassen

location.port;

"pathname" enthält den Pfad einer URL.

URL-Informationen ausgeben lassen

location.pathname;

Die Eigenschaft "search" enthält den Querystring beginnend mit dem Fragezeichen(?).

URL-Informationen ausgeben lassen

location.search;

Die Eigenschaft "hash" enthält den sogenannten "Fragment Identifer", zusammen mit dem #-Symbol. Der "Fragment Identifer" wird verwendet, um beim Aufruf einer Seite bis zu einer bestimmten Stelle zu scrollen.

URL-Informationen ausgeben lassen

location.hash;

Gefolgt von weiteren Eigenschaften.


Auf Querystring-Parameter zugreifen

Um auf die einzelnen Parameter zugreifen zu können, benötigen wir die Hilfe von regulären Ausdrücken und extrahieren dann die Werte, die wir benötigen.


Den Browserverlauf einsehen und verändern

Die Eigenschaft "history" ermöglicht es uns auf ein Objekt zuzugreifen, welches über den Browserverlauf verfügt. Damit können wir nicht nur den Verlauf einsehen, sondern auch verändern.


Im Browserverlauf Navigieren

Jedes Mal, wenn der Browser eine Seite lädt, wird ein neuer Eintrag im Browserverlauf erstellt. Die einzige Ausnahme ist dabei die Methode "replace()", bei der wird kein Eintrag erzeugt. Der Einfluss auf den Browserverlauf steht noch nicht so lange zur Verfügung. Noch vor wenigen Jahren gab es nur die Möglichkeiten, die Anzahl der Einträge im Browserverlauf auszulesen sowie das vor und zurückblättern und das springen auf einen bestimmten Index.


Die Anzahl der Einträge

Über die Länge des "history"-Objekt können wir die Anzahl der Einträge herausfinden.

Browserverlauf auslesen

console.log(window.history.length);

Eine Seite zurück springen

Mit Browserverlauf arbeiten

window.history.back();

Wieder eine Seite vorwärts springen

Mit Browserverlauf arbeiten

window.history.forward();

Mehrere Seiten springen

Mit Browserverlauf arbeiten

window.history.go(-2);

Aktuelle Seite neu laden

Mit Browserverlauf arbeiten

window.history.go(0);

Weiteres

Bei Single-Page Applikationen werden keine neuen URL´s generiert, weil nur ein Teil der Seite neu geladen wird. Mit JavaScript können auch Einträge zu dem Browserverlauf hinzugefügt werden. Bei Veränderungen im Browserverlauf können wir entsprechend reagieren. JavaScript ermöglicht es uns auch, den aktuellen Eintrag im Browserverlauf zu ersetzen.


Browser erkennen und Browserfeatures bestimmen

Um Information über den Browser selber zu erhalten, verwenden wir die Eigenschaft "navigator" des "window"-Objects

Browserinformationen auslesen

console.log(window.navigator);

Die Eigenschaft stellt eine ganze Reihe an Informationen bereit. Die Eigenschaft "navigator.userAgent" wurden früher gerne verwendet, um Rückschlüsse auf den verwendetet Browser ziehen zu können. Dabei ging es nie darum herauszufinden, wer mit welchem Browser online ist, sondern um heraus zu finden, welche Features der Browser unterstützt, um dadurch die meiste Performance mit JavaScript raus zu holen.

Browserinformationen auslesen

console.log(window.navigator.userAgent);

Inzwischen wird stattdessen überprüft, ob der Browser bestimmte Features unterstützt:

Browserfeatures testen

if (navigator.geolocation) {
 console.log('geolocation wird unterstützt');
} else {
 console.log('geolocation wird nicht unterstützt');
}

Neben der "geolocation"-Eigenschaft gibt es noch viele weitere Eigenschaften, die abgefragt werden können.


Auf Informationen des Bildschirms zugreifen

Mit der Eigenschaft "screen" vom Objekt "screen" können wir auf bestimmte Werte wie die Höhe oder Breite des Bildschirmes zugreifen oder in Erfahrung bringen, welche Farbtiefe oder Pixeltiefe der Bildschirm verwendet.


Weiter mit 2D-Grafiken