mySQL-Connection-Probleme mit node.js und MAMP (ECONNREFUSED)

Mit node.js ist es mit wenigen Code-Zeilen möglich eine Verbindung zu einer mySQL-Datenbank herzustellen und daraufhin Queries auszuführen. Ermöglicht wird dies durch das Modul node-mysql welches via Node Package Manager installiert werden kann (zum Beispiel: npm install mysql@2.0.0-alpha2). Wer auf seinem lokalen Rechner MAMP benutzt, kann eventuell Probleme bei der Verbindung zur mySQL-Datenbank bekommen.

Gibt man Benutzername, Passwort, Datenbank und Port an, erhält man folgendes Fehler-Objekt:
[js]{"code":"ECONNREFUSED","errno":"ECONNREFUSED","syscall":"connect","fatal":true}[/js]

Die Angabe des Socket-Paths half mir das Problem in den Griff zu bekommen:
[js]var mysql = require("mysql");


var connection = mysql.createConnection({
user: "YOUR USERNAME",
password: "YOUR PASSWORD",
database: "YOUR DATABASE",
socketPath: ‚/Applications/MAMP/tmp/mysql/mysql.sock‘
});[/js]

Wichtig: Nach Angabe des Paths dürfen keine Werte für „host“ und „port“ mehr mitgesendet werden, da diese sonst den Socket-Path überschreiben. Der Pfad muss bei euch nicht zwingend dort sein wo er bei mir ist. Ich nutze MAMP Pro und kann via http://localhost:8888/MAMP nachsehen wo genau der Socket-Pfad ist. Sollte diese Änderung nichts bewirken kann auch folgender Socket-Path probiert werden:

[js]socketPath: ‚/var/run/mysqld/mysqld.sock'[/js]

Durch erstere Änderung konnte ich mich erfolgreich zu meiner Datenbank (eingerichtet via MAMP) verbinden.

Shark Dash: Alle 3-Sterne-Anleitungen und Walkthroughs

Shark Dash
Shark Dash von Gameloft

Das Leben von Sharky und seinen Spielzeughaifreunden ist perfekt. Eines Tages jedoch erscheinen fiese chemisch-verseuchte Enten in seiner Heimat und bringen die Welt des Haies ganz schön durcheinander. Mitten in der Badewanne gilt es im Spiel “Shark Dash” von Gameloft, erhältlich für iOS und Android, zu Retten was zu Retten ist. Die Bedienung des Games ist kinderleicht und erinnert an Angry Birds: Einfach die Schwanzflosse des Haies ziehen und im richtigen Winkel wieder los lassen. Was nach viel Spaß klingt hat allerdings einen ernsten Hintergrund.

Für die Herstellung von Produkten aus Heiflossen, wurden bis dato 73 Millionen Haie aus den Ozeanen gefischt. Ein Drittel aller Hai-Arten sind dadurch vom Aussterben bedroht. WildAid, die weltweit führende Organisation zum Thema Haifischschutz und die Spieleschmiede Gameloft wollen auf diesen Misstand hinweisen und veröffentlichten das Spiel “Shark Dash” in der international bekannten Shark Week. Mehr Infos im Trailer zum Spiel.

Wer die ersten Schwimmversuche in “Shark Dash” hinter sich gebracht hat, wird es, durch das fesselnde Konzept, schwer haben sich wieder davon zu lösen. Die derzeit 96 verfügbaren Level können durch das Sammeln von Sternen aktiviert werden. Diese erhält man durch das positive Abschließen der einzelnen Level. Hier gibt es alle Anleitungen und Walkthroughs in Videoform, um jede Aufgabe mit der maximalen Punktzahl abzuschließen. Laut Gameloft wird es mit einem zukünftigen Update weitere Level geben. Dieser Artikel wird deshalb laufend aktualisiert.

Übersicht aller Umgebungen im Spiel:

Weitere Spiele-Tipps auf solife.cc: Kingdoms & Lords, Ice Age: Die Siedlung und Subway Surf

Home / Zuhause

Übung macht den Meister und so startet der Spieler bei “Shark Dash” in der heimischen Badewanne, um erste Erfahrung im Kampf gegen die fiesen Enten zu sammeln.

Bild Home / Zuhause
Home / Zuhause

Japan

Schnell findet sich der Spieler im fernen Japan wieder. Viele Missionen und Trophäen warten darauf eingesammelt zu werden!


Bild Japan
Japan

Hotel

Die entführte Hai-Freundin bringt Sharky schließlich in die dritte Game-Umgebung: Das Hotel.

Bild Hotel
Hotel

Rom / Roman

Die 24 Level im antiken Rom stellen das derzeitige Finale des Spieles dar. Sammle alle Sterne und Trophäen ein!

Bild Rom / Roman
Rom / Roman

Kingdoms & Lords: Alle Tipps und Cheats (Münzen, Kristalle, Level)

Kingdoms & Lords
Kingdoms & Lords

Lust auf ein neues Gratis-Aufbauspiel? Nach dem großen Erfolg von “Ice Age: Die Siedlung” nimmt Gameloft uns mit “Kingdoms & Lords” (iOS, Android) mit in eine Welt voller Könige, Kriege und Kämpfe. Ziel ist es ein Königreich samt Armee aufzubauen, um im Kampf gegen die „dunklen Seite“ bestehen zu können. Wer beim Rekrutieren der Armee, der Vorbereitung auf die Schlacht oder dem Aufbau des Dorfes Probleme hat, der findet hier alle Tipps und Tricks um schnell Erfolge im Spiel zu erzielen. Für alle Ungeduldigen gibt es außerdem einen Cheat zu finden.

Spiel-Übersicht

Zu Beginn ist nicht sofort klar, welche Funktionen sich hinter den vielen Bedienelemente von “Kingdoms & Lords” befinden. Hier eine schnelle Übersicht:

Spiel-Übersicht
Alle Elemente erklärt
  1. Ziele/ Quests: Hinter diesem Icon verstecken sich alle aktuellen Aufgaben des Spielers. Das kann die Anweisung sein ein bestimmtes Gebäude zu bauen, die Armee aufzustocken oder ähnliches. Es dient als Leitfaden für den Spieler: So weiß man immer genau was als Nächstes zu erledigen ist.
  2. Münzen/Coins: Münzen sind die Währung im Spiel um Gebäude und Rekruten zu kaufen. Erhöhen kann man seinen Münzen-Stand unter anderem durch erfolgreiche Kämpfe und das Sammeln bei bestehenden Gebäuden.
  3. Kristalle/Crystals: Was in “Ice Age: Die Siedlung” die Eicheln waren sind hier Kristalle. Sammeln kann man sie im Spiel nur langsam, schneller geht es wenn man sie durch echtes Geld im Spiel kauft. Sie werden benötigt um spezielle Dinge zu kaufen.
  4. Energie/Energy: Jede Aktion des Spielers verringert die Energie. Sollte keine Energie mehr vorhanden sein kann Ingame neue gekauft werden oder der Spieler wartet eine Weile bis diese sich von selbst befüllt.
  5. Level: Durch jedes errichtete Gebäude und jeden Kampf sammelt der Spieler Erfahrungpunkte welche wiederum das Level des Gamers steigern. Je Höher das Level eines Spielers desto mehr Gebäude stehen zum Kauf zur Auswahl.
  6. Dinge/Tools: Ganz rechts befindet sich der wichtigste Bereich des Spieles: Hier findet man den Shop um sein Dorf mit neuen Gebäuden oder Dekoration zu befüllen, andere Dörfer wie auch die Lotterie und die Spiel-Optionen.

Die Lotterie

Erste Gewinne in der Lotterie

Keine Lust auf langes Warten? Die Lotterie hilft den Spielern schnell an gute Gegenstände zu gelangen. Sie unterteilt sich in drei Bereiche:

  • Bronze: Kann einmal am Tag gratis benutzt werden (kleinere Gewinne)
  • Silber: Kostet zwei Kristalle pro Runde und bietet bereits bessere Gegenstände
  • Gold: Wer fünf Kristalle investiert kann um die großen Items mitspielen

Wie funktioniert die Lotterie? Der Spieler erhält eine Einheit, die gegen verschiedene Feinde antritt. Je mehr Runden man durchhält, desto bessere Gewinne warten. Keine Taktik hilft hier – Nur das Glück entscheidet! Immer wenn die Bronze-Lotterie zur Verfügung steht, sollte der Spieler diese nutzen um schnell seine Armee bzw. sein Dorf aufzurüsten!

Das Kampfsystem

Immer wieder muss die eigene Armee gegen die des dunklen Königs antreten. Jeder Kampf ist gleich aufgebaut:

Und los geht’s: Der Kampf beginnt!
  • Positionierung: Zu Beginn sieht der Spieler mit welchen Gegnern er es zu tun hat bzw. wieviel Lebenspunkte diese haben. Alle eigenen verfügbaren Kämpfer können nun der Reihe nach auf das Schlachtfeld gestellt werden. Es gibt zwei Bereiche der Positionierung: Vorder- und Rückseite. Erstere ist für Einheiten gedacht welche über starke Abwehrt-Werte verfügen. In die hintere Reihe sollte man Kämpfer positionieren, welche Stark in der Offensive, jedoch schwächer bei der Verteidigung sind.
  • Erster Angriff: Warum bei der Positionierung die oben beschriebene Reihenfolge wichtig ist, wird gleich klar. Die Gegner beginnen zuerst in der Vorderreihe die eigenen Einheiten anzugreifen. Nun heißt es abwechselnd zu attackieren und den Kampfverlauf zu verfolgen.
  • Wichtige Tipps: Sobald man am Zug ist, sollte ein besonderes Augenmerk auf die dargestellten Pfeile, neben den einzelnen Feinden, geworfen werden. Ein grüner Pfeil steht für eine starke Verwundbarkeit, ein roter für eine starke Abwehr. Reiter richten beispielsweise höheren Schaden an Bodeneinheiten an, als dies Fernkämpfer tun würden. Durch das Pfeil-System ist es jedoch nicht wichtig dies im Kopf zu haben: Das Angreifen der jeweils grünen Gegner reicht aus, um meist erfolgreich das Feld zu verlassen.
  • Kampf gewonnen: Jetzt heißt es Münzen und Schilder einsammeln, um das Dorf gleich darauf weiter aufzubauen.

Andere Dörfer und weitere Tipps

“Kingdoms & Lords” ist, wie auch “Ice Age: Die Siedlung” stark auf die Vernetzung mit anderen Spielern ausgelegt. Unter “Dinge” – “Social” können andere Dörfer betrachtet, Freunde gefunden und Kämpfe gestartet werden. Es wartet dort außerdem eine Auflistung der besten Spieler – die Highscore-List.

Was ist sonst noch zu beachten? Ziel ist es das eigene Dorf immer weiter auszubauen: Dies gelingt gut, wenn man den Ziele/Quests folgt, sich mit Freunden vernetzt, Kämpfe austrägt und einmal täglich sein Glück in der Lotterie versucht.

Cheat: Schneller ans Ziel kommen: Leveln und Münzen sammeln

Schon wieder so spät?

Bei all der Ähnlichkeit die das Spiel mit “Ice Age: Die Siedlung” hat, ist nicht verwunderlich, dass auch der dortige Zeit-Cheat direkt auf “Kingdoms & Lords” anwendbar ist. Jedes Gebäude im Spiel wirft nach einer gewissen Zeit Münzen und Erfahrung ab, bzw. das Ankaufen eines Kämpfers benötigt ebenfalls einige Minuten bis Stunden. Mit diesem Cheat kann die Wartezeit aufgelöst werden.

  • Spiel öffnen
  • Zur Systemuhr wechseln und diese je nach Betriebssystem in die Zukunft stellen (ein paar Stunden)
  • Wieder zum Spiel wechseln und siehe da: Es ist viel Zeit vergangen und somit gibt’s wieder einiges zu tun

So lässt sich in kurzer Zeit ein hohes Level erreichen und sehr schnell Münzen sammeln. Wer diesen Cheat anwendet, muss allerdings damit rechnen, seinen Spielspaß erheblich zu senken. Dann lieber doch ehrlich zum Erfolg kommen oder?


Fazit

“Kingdoms & Lords” lehnt sich sehr stark an bekannte Titel von Gameloft an. Das stört allerdings nicht, da der Kampf-Modus und die Vernetzung inklusive Highsore-Liste mit anderen Spielern, einige neue Herausforderungen bietet. Langweilig wird einem so schnell also nicht. Auf in den Kampf!

Vegan For Fit: Alle Challenger-Videos (Attila Hildmann 30-Tage-Challenge)

Vegan for fit

Vegan for fit

Das Buch von Attila Hildmann „VEGAN FOR FIT: Die 30-Tage-Challenge wurde am 1. September 2012 veröffentlicht. Im Vorfeld durften bereits einige Menschen das System des Vegan-Koches auf Herz und Nieren testen. Die Ergebnisse sind bislang mehr als überzeugend: Eine Erfolgsquote von über 99%, keinerlei Verzicht durch die ausgewogene Enährung und ein aktiv sportliches Lebensgefühl soll erreicht werden. Das riecht nach einer echten Revolution am Abnehm-Sektor. Einige der Teilnehmer führen täglich ein Video-Tagebuch, um von ihrer Challenge hautnah zu berichten. Auf solife.cc findet ihr eine Sammlung aller Videos!

Diese Seite wird wöchentlich auf dem aktuellen Stand gehalten. Sollte ich Videos vergessen haben, Inhalte fehlen etc. bitte einfach in den Kommentaren darauf hinweisen!

Alle 46 Video-Challenger auf einen Blick:

Insgesamt liegen 742 Videos vor. Letztes Update 9. Mar – 0:48

Keine Luste zu suchen? Hier gibt’s die neuesten Videos:

Tanja Salkowski

Die Journalistin Tanja Salkowski (34 Jahre) probiert sich an der 30-Tages Challenge und ist eine der ersten Video-Challenger – Viel Glück weiterhin!

Mehr Infos zu Tanja: Youtube-Kanal, Website, Facebook

Bild Tanja Salkowski

Challenger Tanja Salkowski

Benjamin Schimpf

Ben ist 30 Jahre alt und hat den Maschatta im Blut!

Mehr Infos zu Benjamin: Youtube-Kanal, Facebook

Bild Benjamin Schimpf

Challenger Benjamin Schimpf

Frau Vogelschnute

Die 25jährige Frankfurterin ist frisch gebackene Marketing-Assistentin und versucht sich ebenfalls als eine der ersten Video-Challengerin an VEGAN FOR FIT!

Mehr Infos zu Frau Vogelschnute: Youtube-Kanal, Facebook

Bild Frau Vogelschnute

Challenger Frau Vogelschnute

Kathrin Muth

Kathrin rockt ihre Challenge! Manchmal gibt es sogar Videos in englischer Sprache – Go go!

Mehr Infos zu Kathrin: Youtube-Kanal

Bild Kathrin Muth

Challenger Kathrin Muth

Soja Beck-Niederkirchner

Soja zeigt in ihren Videos Kampfgeist, Willensstärke und Ehrlichkeit – Ihre Videos sind sympatisch und motivieren!

Mehr Infos zu Soja: Youtube-Kanal

Bild Soja Beck-Niederkirchner

Challenger Soja Beck-Niederkirchner

Miriam Tietmeyer

Miriam ist eine echte Powerfrau und hat auch keine Angst zu ihrer Meinung zu stehen. Auch sie versucht sich an der 30 Tages Challenge von Attila!

Mehr Infos zu Miriam: Youtube-Kanal

Bild Miriam Tietmeyer

Challenger Miriam Tietmeyer

Matthias Kluth

Matthias ist Jungpapa und Challenger. Beides macht er hervorragend!

Mehr Infos zu Matthias: Youtube-Kanal

Bild Matthias Kluth

Challenger Matthias Kluth

Peter Heinrich

Bei Peter geht´s rund ums Philosophieren für eine bessere Welt, Philosophieren für den Wandel. Das Ganze kombiniert mit der 30-Tages-Challenge – wir sind gespannt!

Mehr Infos zu Peter: Youtube-Kanal

Bild Peter Heinrich

Challenger Peter Heinrich

Andre Challenger

Andrea ist lustig und direkt: Perfekt für ein Video-Tagebuch. Rock on!

Mehr Infos zu Andre: Youtube-Kanal

Bild Andre Challenger

Challenger Andre Challenger

Denise Röhl

Mehr Infos zu Denise: Youtube-Kanal

Bild Denise Röhl

Challenger Denise Röhl

Jessica

Mehr Infos zu Jessica: Youtube-Kanal

Bild Jessica

Challenger Jessica

Nadja Radenkovic

Mehr Infos zu Nadja: Youtube-Kanal

Bild Nadja Radenkovic

Challenger Nadja Radenkovic

Tanja

Mehr Infos zu Tanja: Youtube-Kanal

Bild Tanja

Challenger Tanja

Julia Post

Mehr Infos zu Julia: Youtube-Kanal

Bild Julia Post

Challenger Julia Post

Dani

Mehr Infos zu Dani: Youtube-Kanal

Bild Dani

Challenger Dani

Mela Malaica

Mehr Infos zu Mela: Youtube-Kanal

Bild Mela Malaica

Challenger Mela Malaica

Nikki V Riedl

Mehr Infos zu Nikki: Youtube-Kanal

Bild Nikki V Riedl

Challenger Nikki V Riedl

Svenja

Mehr Infos zu Svenja: Youtube-Kanal

Bild Svenja

Challenger Svenja

Stefanie Schmanky

Mehr Infos zu Stefanie: Youtube-Kanal

Bild Stefanie Schmanky

Challenger Stefanie Schmanky

Sophia

Mehr Infos zu Sophia: Youtube-Kanal

Bild Sophia

Challenger Sophia

Anna

Mehr Infos zu Anna: Youtube-Kanal

Bild Anna

Challenger Anna

Cathrine Jauer

Mehr Infos zu Cathrine: Youtube-Kanal, Website

Bild Cathrine Jauer

Challenger Cathrine Jauer

Ruhrpott Vlog

Mehr Infos zu RuhrpottVlog: Youtube-Kanal

Bild Ruhrpott Vlog

Challenger Ruhrpott Vlog

Sookie von planty

Leider kurz nach dem Beginn auch schon wieder aufgehört. Wer mehr über Sookie erfahren mag, findet in ihrem Blog ganz viele tolle Rezepte!

Mehr Infos zu Sookie: Youtube-Kanal, Website

Bild Sookie von planty

Challenger Sookie von planty

Alwini

Mehr Infos zu Alwini: Youtube-Kanal, Website

Bild Alwini

Challenger Alwini

Frollein Dreizehn

Mehr Infos zu Frollein: Youtube-Kanal, Website

Bild Frollein Dreizehn

Challenger Frollein Dreizehn

Sören Stein

Mehr Infos zu Sören: Youtube-Kanal, Website

Bild Sören Stein

Challenger Sören Stein

Piper

Mehr Infos zu Piper: Youtube-Kanal

Bild Piper

Challenger Piper

Anny Banani

Mehr Infos zu Anny: Youtube-Kanal

Bild Anny Banani

Challenger Anny Banani

Claudia Schmid

Mehr Infos zu Claudia: Youtube-Kanal

Bild Claudia Schmid

Challenger Claudia Schmid

Dörte Lauridsen

Mehr Infos zu Dörte: Youtube-Kanal

Bild Dörte Lauridsen

Challenger Dörte Lauridsen

CherryVanHolland

Mehr Infos zu CherryVanHolland: Youtube-Kanal

Bild CherryVanHolland

Challenger CherryVanHolland

MissMarbles

Mehr Infos zu MissMarbles: Youtube-Kanal

Bild MissMarbles

Challenger MissMarbles

CatherineVcat

Mehr Infos zu CatherineVcat: Youtube-Kanal

Bild CatherineVcat

Challenger CatherineVcat

Katharina und Sebastian Wüst

Mehr Infos zu Katharina und Sebastian: Youtube-Kanal

Bild Katharina und Sebastian Wüst

Challenger Katharina und Sebastian Wüst

Susanne

Mehr Infos zu Susanne: Youtube-Kanal

Bild Susanne

Challenger Susanne

Ro Wi

Mehr Infos zu Ro Wi: Youtube-Kanal

Bild Ro Wi

Challenger Ro Wi

Nicole

Mehr Infos zu Nicole van den Bruck: Youtube-Kanal

Bild Nicole

Challenger Nicole

MansonCookie

Mehr Infos zu MansonCookie: Youtube-Kanal

Bild MansonCookie

Challenger MansonCookie

May A Bee

Mehr Infos zu May A Bee: Youtube-Kanal

Bild May A Bee

Challenger May A Bee

Miso Kim

Mehr Infos zu Miso Kim: Youtube-Kanal

Bild Miso Kim

Challenger Miso Kim

BerlinGirl82

Mehr Infos zu BerlinGirl82: Youtube-Kanal

Bild BerlinGirl82

Challenger BerlinGirl82

LyTheBeee

Mehr Infos zu LyTheBeee: Youtube-Kanal

Bild LyTheBeee

Challenger LyTheBeee

Vickylein666

Mehr Infos zu Vickylein666: Youtube-Kanal

Bild Vickylein666

Challenger Vickylein666

Doreen Kauert

Mehr Infos zu Doreen: Youtube-Kanal

Bild Doreen Kauert

Challenger Doreen Kauert

HTML5 Iframe-Attribut seamless schon jetzt nutzen (Alle Informationen und Beispiele)

Es gibt sie auf fast jeder Internetseite und trotzdem mag sie kein Webentwickler: Iframes. Früher wurden sie verwendet um ganze Internet-Auftritte umzusetzen (Stichwort: nav.html, content.html), heute Fristen sie ein unscheinbares Dasein als Container-Elemente unzähliger Social-Media- und Werbe-Boxen. Das Arbeiten mit Iframes wird jedoch durch HTML5 bald um einiges angenehmer werden. Welche Vorteile das hat, wie man die Features teilweise schon jetzt nutzen kann und warum Iframes gar nicht so böse sind, erklärte Ben Vinegar vor einiger Zeit in einem Vortrag. Die Slides dazu gibt es hier, die eingedeutschte Zusammenfassung mit Beispielen in diesem Artikel.

Keine Zeit? Hier geht’s direkt zur Demo-Seite inkl. Code.

Sind Iframes wirklich böse? Nein!

seamless-Iframe Attribut schon jetzt nutzen
Das seamless-Attribut und seine Möglichkeiten

Iframes, also quasi Webseiten in Webseiten, sind vom Rest der Seite isoliert, bilden eine sogenannte Sandbox. Das hat Nachteile für Webentwickler: CSS wird nicht in den Frame übernommen, Links innerhalb des Iframes verweisen nicht auf die einbindende Seite und die Größe des Frame-Elements passt sich nicht an den Inhalt darin an. Doch genau dieses Sandbox-Prinzip hat Vorteile: JavaScript-Konflikte werden verhindert und Sicherheit und Datenschutz des Users gewahrt. Services wie Flattr, Google Adsense und viele Andere können und müssen via Iframe in die eigene Seite eingebunden werden.

HTML5 und das seamless-Attribut

Da derzeitige Nachteile nicht zukünftig das Arbeiten mit Iframes verhindern sollen, wurde das HTML5-Attribut seamless hinzugefügt. Ein einfaches Beispiel:

[html]<iframe seamless src="http://www.solife.cc"></iframe>[/html]

CSS-Eigenschaften werden dadurch direkt in den Frame übernommen und die Links öffnen korrekt im übergeordneten Fenster. Außerdem passt sich der Iframe mit dem Attribut der Höhe des Inhalts an und Linien sowie Scrollbalken werden standardmässig nicht angezeigt. Wie bei allen neuen Errungenschaften im Web gibt es Dinge zu beachten und Kompromisse einzugehen:

  • Es wird nur http://, nicht aber file:// unterstützt
  • Kein einziger Stable-Browser verfügt derzeit über Support
  • Nur Google Chrome Canary (Version 22 und höher) unterstüzt derzeit das Attribut
  • Die Implementierung der anderen Browser kann als oberflächlich bezeichnet werden

Schon jetzt die neuen Vorteile nutzen

Um schon jetzt die Vorteile des seamless-Attributes zu Nutzen bedarf es einiger Tricks. Zu aller erst muss sowohl auf der Hauptseite, als auch im Iframe selbst, JavaScript-Code eingefügt werden. Damit beide Bereiche kommunizieren können, wird die window.postMessage-Methode genutzt. Die Optik der “nahtlosen” Darstellung kann mit etwas CSS nachgebaut werden.

Einrichten von postMessage und CSS

Code der Hauptseite:

[js]<iframe seamless id="myFrame" src="iframe.html"></iframe>

<script>
var iframe = document.getElementById("myFrame");
// Erste Test-Nachricht an den Iframe
iframe.onload = function() {
iframe.contentWindow.postMessage(‚Hallo Iframe!‘, "*" );
};
</script>[/js]

Da die Nachricht erst gesendet werden soll, wenn der Iframe schon geladen ist, verwende ich den onload-Event-Handler.

JavaScript-Code für den Iframe:

[js] // Wird aufgerufen bei einer neuen Nachricht
function listener(e){
alert(e.data);
}

// Listener für alle Browser
if (window.addEventListener){
window.addEventListener("message", listener, false);
} else {
window.attachEvent("onmessage", listener);
}
[/js]
Wir haben nun die erste Test-Nachricht via Hauptseite an den Iframe gesendet. Die Vorteile von postMessage können wir nun nutzen, um unterschiedliche Werte an den Frame zu übermitteln und das seamless-Attribut teilweise zu simulieren.

CSS für die Hauptseite (Nahtloser Iframe-Effekt):

[css]iframe[seamless]{
background-color: transparent;
border: 0 none transparent;
padding: 0;
overflow: hidden;
}[/css]

Um Links innerhalb des Iframes korrekt zu öffnen, könnte man bei jedem Link das Attribut target="_parent" hinzufügen. Das ist allerdings Wartungsintensiv und überladet das Markup. Dank des <base>-Tags und etwas Java-Script kann dies automatisiert werden.

Im <head>-Bereich des Iframes einfügen:

[html]<base href="http://www.solife.cc/" target="_parent">[/html]

Die angegebene URL des href-Attributes ist nicht zwingend notwendig, da sie mittels Javascript gleich mit der dynamischen Seiten-URL getauscht wird.

Im JavaScript (onLoad-Bereich) der Hauptseite einfügen:

[js] // Schicke aktuelle URL an Iframe
iframe.contentWindow.postMessage([‚referrer‘, window.location.href], ‚*‘);
[/js]

Javascript des Iframes empfängt Nachricht und ändert Base-URL:

[js] // Neue Listener-Funktion
function listener(e){

var eventName = e.data[0],
data = e.data[1];

switch (eventName) {
case ‚referrer': setNewBase(data); break;
}

}

// Aktualisiere Base-URL
function setNewBase(url) {
document.getElementsByTagName(‚base‘)[0].href = url;
}
[/js]

Styles in den Iframe übernehmen

Es ist keine perfekte Lösung, aber es können beliebige Style-Eigenschaften wie Schriftart, Schriftgröße und Schriftfarbe via Nachricht dem Iframe übergeben werden. In diesem Beispiel wird dies Mithilfe von jQuery gelöst:

[js] iframe.onload = function() {

….
// Style-Eigenschaften an Iframe senden
iframe.contentWindow.postMessage([‚styles‘, getIframeStyles(iframe)], ‚*‘);

};

// Styles auslesen (Dazu wird ein leeres span-Element erstellt)
function getIframeStyles(iframe) {

var $span = $(‚<span>‘).appendTo(iframe.parentNode);

var styles = {
color: $span.css(‚color‘),
fontFamily: $span.css(‚font-family‘),
fontSize: $span.css(‚font-size‘)
};

$span.remove(); // Cleanup
return styles;

}
[/js]

Natürlich können beliebig viele Styles an den Iframe übergeben werden. Auch ist es möglich ganze CSS-File-URL’s zu versenden, um sie später einzufügen. Wir bleiben bei der einfachen Methode der Werte-Übermittlung.

Beim Iframe selbst nun folgenden Code einfügen:

[js]function listener(e){

….

switch (eventName) {
case ‚referrer': setNewBase(data); break;
case ‚styles': injectStyles(data); break;
}

}

function injectStyles(styles) {
$(document.body).css(styles);
}
[/js]
Wie oben beschrieben gibt es viele Wege die gewünschten Style-Eigenschaften in den Frame zu bekommen. Dem Webworker ist überlassen wie er diesen Prozess umsetzt.

Höhe des Iframes automatisch anpassen

Jeder Coder der bereits einmal ein Gästebuch oder ähnliches via Iframe einbinden musste, kennt das Problem: Welche Höhe definiert man dem Iframe-Element? Gerade bei dynamischen Seiten ist diese Frage schwer zu beantworten – die Lösung ist meist eine Höhe von weit über 1000 Pixel zu wählen. Dank postMessage kann die korrekte Höhe nun direkt übertragen werden.

Da in diesem Schritt die Hauptseite, nicht wie bisher, Nachrichten sendet, sondern auch empfängt, muss ein ähnlicher Code wie im Iframe eingebunden werden.
[js] // Wird aufgerufen bei einer neuen Nachricht
// Auf Hauptseite nur um Höhe anzupassen
function listener(e){

var eventName = e.data[0],
data = e.data[1];

switch (eventName) {
case ‚setHeight': $(iframe).height(data); break;
}

}

// Listener für alle Browser
if (window.addEventListener){
window.addEventListener("message", listener, false);
} else {
window.attachEvent("onmessage", listener);
}
[/js]

Das JavaScript des Iframes aktualisieren:
[js] // Resize-Funktion zum Ermitteln der Höhe
function resize() {
window.parent.postMessage([‚setHeight‘, $(‚html‘).height()], ‚*‘);
}
[/js]
Jetzt muss die resize()-Funktion nur noch aufgerufen werden. Auch hier gibt es mehrere Möglichkeiten der Umsetzung:

  • Die Funktion wird permanent via Interval alle 500 Millisekunden odgl. aufgerufen
  • Die Funktion feuert erst wenn ein bestimmtes Event eingetreten ist
  • Wie Ben Vinegar in seinem Vortrag, mit der Debounce-Methode (Code)

Zur einfacheren Vorstellung verwende ich für dieses Beispiel die Interval-Methode.
[js] // Alle 500 Millisekunden die Höhe des Frames anpassen
window.setInterval(resize, 500);
[/js]
Das Iframe passt sich nun immer der Höhe des Inhalts darin an.

Resume

Mit diesen wenigen Code-Zeilen ist es möglich das Arbeiten mit Iframes erheblich zu verbessern und das seamless-Attribut zumindest teilweise nachzubauen. Die window.postMessage-Methode wird in allen Browser, bis auf Internet Explorer 6 und 7 unterstützt. Bis alle Browser nachgerüstet haben bleibt dieser Workflow eine passable Alternative.

Zur Demo-Seite inkl. Code.