SlideShare una empresa de Scribd logo
1 de 21
Einbindung externer Inhalte	via Javascript/jQuery
Was soll erreicht werden? Der Inhalt einer Seite (bestehend aus zwei unabhängigen Bereichen) soll als Inhalt in einer anderen Webseite eingebunden/angezeigt werden. Es soll nicht grundlegend mit HTML (iFrame) oder PHP (cURL) gelöst werden Es soll eine technisch sichere Einbindung sein
Hintergrund Ich habe mich mit diesem Thema beschäftigt, da vor Kurzem der Auftrag reinkam, wie auf der vorherigen Seite beschrieben, den Inhalt einer Seite in eine andere Seite zu laden. Auf der zu ladenden Seite war allerdings das Problem, dass diese mit Frames aufgebaut war und dadurch nicht simpel mit einem iFrame eingebunden werden konnte. Zudem gab es noch ein paar andere Probleme, die während der Umsetzung aufkamen. Diese und deren Lösungen kommen aber in späteren Seiten noch zur Geltung. Auf den nächsten Seiten sind beide Websites dargestellt: die zu ladende und die fertige Seite mit geladenem Inhalt.
Hintergrund1. - Die Seite mit dem zu ladenden Inhalt
Hintergrund2. - Die fertige Seite mit geladenem Inhalt
Aufbau der einzubindenden Seite Geplante Funktionalität der Links: ,[object Object]
 Links im Menübereich werden im linken Div geladen
 Links im Fließtext sollen auch im linken Div geladen werden
  Das A-Z-Menü (links) „filtert“ den Menübereich alphabetisch (eigene Seiten).Link
Grundlegender Ablaufplan Zwei statische Div-Container erstellen und mit CSS wie in der Vorlage ausrichten. (Dieser Punkt wird übersprungen) Laden der Start-Inhalte in beide Div-Container per jQuery. Alle Links mit jQuery deaktivieren via Javascript/jQuery die Link-Seiteninhalte manuell per Click in den linken Div laden Via Javascript/jQuery die Links des A-Z-Menüs manuell per Click in den rechten Div laden Links im Textbereich auch in den linken Div-Container laden
2. - Laden der Start-Inhalte1. - Vorbereitung 	Dafür müssen leider erstmal vorher einige Vorkehrungen, in Sachen Funktionalität und Sicherheit getroffen werden Da Javascript die Inhalte einer fremden Seite nicht lesen darf, weil es im Gegensatz zu PHP und HTML nicht Serverseitig arbeitet, benötigen wir ein PHP-Script dazwischen: ,[object Object],Dadurch ist eine Sicherheitslücke entstanden; man könnte jederzeit über das Script irgendeinen Seiteninhalt aus dem Web in den Div-Container einschleusen. ,[object Object],[object Object]
2. - Laden der Start-Inhalte1. - Vorbereitung: Code: getUrlScript.php functionmain() { 	   $url = **GETURL**;   //Dies ist ein Platzhalter, der PHP-Code dafür ist 				/für Vorzeigezwecke zu lang (aber leicht zu finden). 		$urlarr = parse_url($url); if (!stristr($urlarr['host'], 'www.trustedhost.de')) { 			die('URL not allowed'); 		} 	   $content = **GETURL**;	    return $content; 	}
2. - Laden der Start-Inhalte2. - Inhalte laden mit jQuery & Ajax Jetzt da die Seiteninhalte ganz bequem geladen werden können, nun der jQuery-Code: 	$.ajax({ url: 'getUrlScript.php?url=www.trustedhost.de/startseite.html', success: function(data) {		 		$('div#left').html(data); 	  }, 	}); 	Hier wird als erstes dem zuvor erstellten getUrlScript die Start-URL der Seite, dessen Inhalte im linken Container anzeigt werden sollen übergeben. 	(Das ganze muss natürlich für den rechten Container auch geschrieben sein)
3. - Alle Links mit jQuery deaktivieren Jetzt müssen noch die Links mit jQuery deaktiviert werden, dass vorerst nichts passiert wenn man sie anklickt. Das funktioniert mit:$('div#left a').live('click', function(event){event.preventDefault(); Das “.live” muss dortstehen, da jQuery sonst den zuvorhineingeladenenInhaltnichtmiteinbezieht. Hierdurch werden alle Links im linken Div-Container deaktiviert. – Das gleiche muss nun natürlich mit den Links im rechten, Menü-Container, auch gemacht werden.
4. - Seiteninhalte manuell in linken Div laden1. - Auslesen der URL der Inhaltsseite Problematik: Die Links sind evtl. relativ angegeben. Lösung: zuerst wird darauf geprüft, ob „http“ im String der URL vorkommt und unsere „baseurl“ vor die Links gesetzt, falls nicht. Außerdem, muss dieser Inhalt natürlich auch noch durch die getUrlScript.php, um auf einen vertrauenswürdigen Host zu prüfen und die Inhalte einer externen Seite laden zu können. Code: varurl = $(this).attr('href'); var baseurl = 'http://www.trustedhost.de/PFADZUMINHALT/'; if (url.indexOf('http') == -1) { url = baseurl + url; 		} varloadurl = 'getUrlScript.php?url=' + url; ,[object Object],loadurl = loadurl.replace(/../g, "http://www.trustedhost.de/PFADZUMINHALT/");
4. - Seiteninhalte manuell in linken Div laden2. - Laden des Inhalts 	Nun, kann der Inhalt wieder ganz einfach mit jQuery geladen werden; der zu ladende Inhalt steht jetzt in der Variable „loadurl“: 		$.ajax({ url: loadurl, success: function(data) { 				$('div#left').html(data); 			}, 		});
5. - Seiteninhalte aus A-Z-Menü manuell in rechten Div laden Um das A-Z-Menü eindeutig ansprechen zu können benötigt dieses eine Klasse oder eine ID – z.B. im <ul>-Element des HTML-Templates gesetzt. (hier z.B.: „a-z-menu“) Danach kann mit folgendem Code der Inhalt der links in den rechten Div geladen werden: 		$('div#leftul.a-z-menu a').live('click', function(event){ event.preventDefault(); varurl = $(this).attr('href'); varbaseurl = 'http://www.trustedhost.de/PFADZUMINHALT/'; if (url.indexOf('http') == -1) { url = baseurl + url; 			} varloadurl = 'getUrlScript.php?url=' +url; 			$.ajax({ url: loadurl, success: function(data) { 					$('div#right').html(data); (Klammern schließen) »  Im Grunde also das gleiche, wie beim Laden der Inhalte in den linken Div-Container (siehe 4.), nur dass nicht alle Links angesprochen werden, sondern nur die der Klasse/ID „a-z-menu“.
6. - Links aus Textbereich auch in linken Div-Container laden 1. - Problematik: 1. Lösung 	Jetzt sollte natürlich, wenn im Fließtext des zuvor geladenen Inhalts ein Link vorkommt, dieser nicht auch im rechten Div-Container geladen werden, wie der Inhalt des A-Z-Menüs. Dafür gibt es zwei Lösungsmöglichkeiten: Man sucht sich im Inhalt der zu ladenden Seite eine Bezugsstelle, wie zum Beispiel Paragraphen (<p>-Tags), falls diese verwendet wurden, und schreibt folgenden Code: $('div#left p a').live('click', function(event) { »  Danachwiedermit  Javascript & jQuery den Inhaltprüfen und laden (6.2).
6. - Links aus Textbereich auch in linken Div-Container laden 1. - Problematik: 2. Lösung Die zweite Lösung ist zu empfehlen, wenn im Fließtext der einzubindenden Seite keine ansprechbaren Klassen oder IDs gesetzt wurden, aber das Menü, wie bei 5., die Klasse „a-z-menu“ besitzt : $('div#left' a).not('ul.a-z-menu a').live('click', function(event) { Der, nachdieserZeilefolgende, Code wirktsich auf alle Links imlinken Div-Container, abernicht auf die Links innerhalb des <ul>-Tags mitderKlasse “a-z-menu”. »  Danachwiedermit  Javascript & jQuery den Inhaltprüfen und laden (6.2).
6. - Links aus Textbereich auch in linken Div-Container laden2. - Umsetzung Nach einer der beiden, gerade besprochenen Zeilen, muss nun wieder folgender Code geschrieben werden: event.preventDefault(); varurl = $(this).attr('href'); varbaseurl = 'http://www.trustedhost.de/PFADZUMINHALT/'; if (url.indexOf('http') == -1) { url = baseurl + url; 		} varloadurl = 'getUrlScript.php?url=' + url; 		$.ajax({ url: loadurl, success: function(data) { 				$('div#left').html(data); (Klammern schließen) »  Was wieder das gleiche, wie beim Laden der Inhalte in den linken Div-Container (siehe 4.) ist.
RückblendeWas wurde nun geschafft? Es wird nun Standardmäßig immer erst eine Startseite in den jeweiligen Div-Container geladen. Es können die Inhalte der Links von rechts aus dem Menü nach links in den Content-Bereich geladen werden und die Inhalte der Links aus dem A-Z-Menü nach rechts in den Menübereich geladen werden, um dieses zu filtern. Es ist dafür gesorgt, dass Links die im Fließtext des geladenen Inhalts vorkommen, auch im linken Bereich geladen werden und nicht rechts im Menübereich. Das Problem, dass Ajax keine externen Seiten laden darf/kann, ist mit dem PHP-getUrlScript gelöst und gleichzeitig wurde damit noch die Sicherheitslücke, dass Inhalte von sämtlichen (bösartigen) Seiten von Dritten geladen und angezeigt werden könnten, geschlossen.

Más contenido relacionado

Destacado

Whitepaper Team Foundation Server 2010 Lab Management
Whitepaper Team Foundation Server 2010 Lab ManagementWhitepaper Team Foundation Server 2010 Lab Management
Whitepaper Team Foundation Server 2010 Lab ManagementNico Orschel
 
FH Wedel - SS11 - Seminar - Marcus Riemer - LEDA
FH Wedel - SS11 - Seminar - Marcus Riemer - LEDAFH Wedel - SS11 - Seminar - Marcus Riemer - LEDA
FH Wedel - SS11 - Seminar - Marcus Riemer - LEDAMarcus Riemer
 
Can Bonastre - Weingut, Deutsch
Can Bonastre - Weingut, DeutschCan Bonastre - Weingut, Deutsch
Can Bonastre - Weingut, DeutschCanBonastre-Sales
 
Wunderman Whitepaper - Was bringt Partizipation?
Wunderman Whitepaper - Was bringt Partizipation?Wunderman Whitepaper - Was bringt Partizipation?
Wunderman Whitepaper - Was bringt Partizipation?Wunderman GmbH
 
Was bedeutet "Neues Lernen" für die Supervision?
Was bedeutet "Neues Lernen" für die Supervision?Was bedeutet "Neues Lernen" für die Supervision?
Was bedeutet "Neues Lernen" für die Supervision?Andrea Brücken
 
Modul 4 mit Ideen zur Unterstützung der Textanalyse mit i desk
Modul 4 mit  Ideen zur Unterstützung der Textanalyse mit i deskModul 4 mit  Ideen zur Unterstützung der Textanalyse mit i desk
Modul 4 mit Ideen zur Unterstützung der Textanalyse mit i deskIngo15
 
Vision Zurich IT Valley
Vision Zurich IT ValleyVision Zurich IT Valley
Vision Zurich IT Valleyzurichitvalley
 
Ethik im Internet
Ethik im InternetEthik im Internet
Ethik im InternetJorin
 
Convenience Payment Wallet Lösungen - Expercash Vortrag Internet Word 2014
Convenience Payment Wallet Lösungen - Expercash Vortrag Internet Word 2014Convenience Payment Wallet Lösungen - Expercash Vortrag Internet Word 2014
Convenience Payment Wallet Lösungen - Expercash Vortrag Internet Word 2014Expercash GmbH
 
Bessere Kommunikation in Krankenhaus-Teams
Bessere Kommunikation in Krankenhaus-TeamsBessere Kommunikation in Krankenhaus-Teams
Bessere Kommunikation in Krankenhaus-TeamsChristiane Fruht
 
6 open gov_auswertungsueberblick
6 open gov_auswertungsueberblick6 open gov_auswertungsueberblick
6 open gov_auswertungsueberblickZebralog
 
Mesyuarat jawatankuasa rintis sekolah
Mesyuarat jawatankuasa rintis sekolahMesyuarat jawatankuasa rintis sekolah
Mesyuarat jawatankuasa rintis sekolahShamsul Rizal
 
Vortrag hagen 2014_a
Vortrag hagen 2014_aVortrag hagen 2014_a
Vortrag hagen 2014_abildsymbol123
 
Convenience Payment im Multichannel Expercash Vortrag Internet World 2014
Convenience Payment im Multichannel Expercash Vortrag Internet World 2014Convenience Payment im Multichannel Expercash Vortrag Internet World 2014
Convenience Payment im Multichannel Expercash Vortrag Internet World 2014Expercash GmbH
 

Destacado (20)

Whitepaper Team Foundation Server 2010 Lab Management
Whitepaper Team Foundation Server 2010 Lab ManagementWhitepaper Team Foundation Server 2010 Lab Management
Whitepaper Team Foundation Server 2010 Lab Management
 
FH Wedel - SS11 - Seminar - Marcus Riemer - LEDA
FH Wedel - SS11 - Seminar - Marcus Riemer - LEDAFH Wedel - SS11 - Seminar - Marcus Riemer - LEDA
FH Wedel - SS11 - Seminar - Marcus Riemer - LEDA
 
Can Bonastre - Weingut, Deutsch
Can Bonastre - Weingut, DeutschCan Bonastre - Weingut, Deutsch
Can Bonastre - Weingut, Deutsch
 
Wunderman Whitepaper - Was bringt Partizipation?
Wunderman Whitepaper - Was bringt Partizipation?Wunderman Whitepaper - Was bringt Partizipation?
Wunderman Whitepaper - Was bringt Partizipation?
 
Was bedeutet "Neues Lernen" für die Supervision?
Was bedeutet "Neues Lernen" für die Supervision?Was bedeutet "Neues Lernen" für die Supervision?
Was bedeutet "Neues Lernen" für die Supervision?
 
Resumen
ResumenResumen
Resumen
 
Studie zu Open Government: Wünschen Bürger mehr Beteiligung?
Studie zu Open Government: Wünschen Bürger mehr Beteiligung?Studie zu Open Government: Wünschen Bürger mehr Beteiligung?
Studie zu Open Government: Wünschen Bürger mehr Beteiligung?
 
Modul 4 mit Ideen zur Unterstützung der Textanalyse mit i desk
Modul 4 mit  Ideen zur Unterstützung der Textanalyse mit i deskModul 4 mit  Ideen zur Unterstützung der Textanalyse mit i desk
Modul 4 mit Ideen zur Unterstützung der Textanalyse mit i desk
 
m_perf_mark_wko
m_perf_mark_wkom_perf_mark_wko
m_perf_mark_wko
 
Vision Zurich IT Valley
Vision Zurich IT ValleyVision Zurich IT Valley
Vision Zurich IT Valley
 
Ethik im Internet
Ethik im InternetEthik im Internet
Ethik im Internet
 
Vilnius krakow
Vilnius krakowVilnius krakow
Vilnius krakow
 
Convenience Payment Wallet Lösungen - Expercash Vortrag Internet Word 2014
Convenience Payment Wallet Lösungen - Expercash Vortrag Internet Word 2014Convenience Payment Wallet Lösungen - Expercash Vortrag Internet Word 2014
Convenience Payment Wallet Lösungen - Expercash Vortrag Internet Word 2014
 
Menschenhandel
Menschenhandel Menschenhandel
Menschenhandel
 
Bessere Kommunikation in Krankenhaus-Teams
Bessere Kommunikation in Krankenhaus-TeamsBessere Kommunikation in Krankenhaus-Teams
Bessere Kommunikation in Krankenhaus-Teams
 
6 open gov_auswertungsueberblick
6 open gov_auswertungsueberblick6 open gov_auswertungsueberblick
6 open gov_auswertungsueberblick
 
SAS Forum Deutschland 2012 - Von Social Media zu CRM
SAS Forum Deutschland 2012 -  Von Social Media zu CRMSAS Forum Deutschland 2012 -  Von Social Media zu CRM
SAS Forum Deutschland 2012 - Von Social Media zu CRM
 
Mesyuarat jawatankuasa rintis sekolah
Mesyuarat jawatankuasa rintis sekolahMesyuarat jawatankuasa rintis sekolah
Mesyuarat jawatankuasa rintis sekolah
 
Vortrag hagen 2014_a
Vortrag hagen 2014_aVortrag hagen 2014_a
Vortrag hagen 2014_a
 
Convenience Payment im Multichannel Expercash Vortrag Internet World 2014
Convenience Payment im Multichannel Expercash Vortrag Internet World 2014Convenience Payment im Multichannel Expercash Vortrag Internet World 2014
Convenience Payment im Multichannel Expercash Vortrag Internet World 2014
 

Similar a Einbindung externer Webseiten via Javascript/jQuery

Varnish PHP Unconference Hamburg 2012
Varnish PHP Unconference Hamburg 2012Varnish PHP Unconference Hamburg 2012
Varnish PHP Unconference Hamburg 2012Florian Holzhauer
 
1&1 Frontend Workshop II
1&1 Frontend Workshop II1&1 Frontend Workshop II
1&1 Frontend Workshop IINico Steiner
 
GWT Introduction
GWT IntroductionGWT Introduction
GWT Introductionpfleidi
 
WebTech 2009: Best Practices in JavaScript und CSS (kommentiert)
WebTech 2009: Best Practices in JavaScript und CSS (kommentiert)WebTech 2009: Best Practices in JavaScript und CSS (kommentiert)
WebTech 2009: Best Practices in JavaScript und CSS (kommentiert)Nicolai Schwarz
 
WordPress - Seiten anteasern. Theorie, Praxis, Plugins
WordPress - Seiten anteasern. Theorie, Praxis, PluginsWordPress - Seiten anteasern. Theorie, Praxis, Plugins
WordPress - Seiten anteasern. Theorie, Praxis, Pluginsfrankstaude
 
WP-CLI - Das Kommandozeilen Interface für Wordpress
WP-CLI - Das Kommandozeilen Interface für WordpressWP-CLI - Das Kommandozeilen Interface für Wordpress
WP-CLI - Das Kommandozeilen Interface für Wordpressfrankstaude
 
jQueryMobile mit Extbase/Fluid
jQueryMobile mit Extbase/FluidjQueryMobile mit Extbase/Fluid
jQueryMobile mit Extbase/FluidPeter Schuhmann
 
Einstieg in Xpath für SEO (Campixx2021)
Einstieg in Xpath für SEO (Campixx2021)Einstieg in Xpath für SEO (Campixx2021)
Einstieg in Xpath für SEO (Campixx2021)Sebastian Adler
 
C++ Dependency Management 2.0
C++ Dependency Management 2.0C++ Dependency Management 2.0
C++ Dependency Management 2.0Patrick Charrier
 
magnolia mit thymeleaf - ein agiler prozess-beschleuniger
magnolia mit thymeleaf - ein agiler prozess-beschleunigermagnolia mit thymeleaf - ein agiler prozess-beschleuniger
magnolia mit thymeleaf - ein agiler prozess-beschleunigerThomas Kratz
 
Malte Wessel - Google web toolkit
Malte Wessel - Google web toolkitMalte Wessel - Google web toolkit
Malte Wessel - Google web toolkitdrbreak
 
Schulung jQuery JavaScript-Bibliothek
Schulung jQuery JavaScript-BibliothekSchulung jQuery JavaScript-Bibliothek
Schulung jQuery JavaScript-Bibliothektutego
 
Fanstatic pycon.de 2012
Fanstatic pycon.de 2012Fanstatic pycon.de 2012
Fanstatic pycon.de 2012Daniel Havlik
 
Bestehende WordPress-Seiten auf Multisite migrieren
Bestehende WordPress-Seiten auf Multisite migrierenBestehende WordPress-Seiten auf Multisite migrieren
Bestehende WordPress-Seiten auf Multisite migrierenWalter Ebert
 

Similar a Einbindung externer Webseiten via Javascript/jQuery (20)

Varnish PHP Unconference Hamburg 2012
Varnish PHP Unconference Hamburg 2012Varnish PHP Unconference Hamburg 2012
Varnish PHP Unconference Hamburg 2012
 
1&1 Frontend Workshop II
1&1 Frontend Workshop II1&1 Frontend Workshop II
1&1 Frontend Workshop II
 
Einsteiger Workshop
Einsteiger WorkshopEinsteiger Workshop
Einsteiger Workshop
 
GWT Introduction
GWT IntroductionGWT Introduction
GWT Introduction
 
Automatisierung mit grunt
Automatisierung mit gruntAutomatisierung mit grunt
Automatisierung mit grunt
 
react-de.pdf
react-de.pdfreact-de.pdf
react-de.pdf
 
Symfony2
Symfony2Symfony2
Symfony2
 
Wicket Kurzübersicht
Wicket KurzübersichtWicket Kurzübersicht
Wicket Kurzübersicht
 
WebTech 2009: Best Practices in JavaScript und CSS (kommentiert)
WebTech 2009: Best Practices in JavaScript und CSS (kommentiert)WebTech 2009: Best Practices in JavaScript und CSS (kommentiert)
WebTech 2009: Best Practices in JavaScript und CSS (kommentiert)
 
WordPress - Seiten anteasern. Theorie, Praxis, Plugins
WordPress - Seiten anteasern. Theorie, Praxis, PluginsWordPress - Seiten anteasern. Theorie, Praxis, Plugins
WordPress - Seiten anteasern. Theorie, Praxis, Plugins
 
WP-CLI - Das Kommandozeilen Interface für Wordpress
WP-CLI - Das Kommandozeilen Interface für WordpressWP-CLI - Das Kommandozeilen Interface für Wordpress
WP-CLI - Das Kommandozeilen Interface für Wordpress
 
jQueryMobile mit Extbase/Fluid
jQueryMobile mit Extbase/FluidjQueryMobile mit Extbase/Fluid
jQueryMobile mit Extbase/Fluid
 
Einstieg in Xpath für SEO (Campixx2021)
Einstieg in Xpath für SEO (Campixx2021)Einstieg in Xpath für SEO (Campixx2021)
Einstieg in Xpath für SEO (Campixx2021)
 
C++ Dependency Management 2.0
C++ Dependency Management 2.0C++ Dependency Management 2.0
C++ Dependency Management 2.0
 
node.js
node.jsnode.js
node.js
 
magnolia mit thymeleaf - ein agiler prozess-beschleuniger
magnolia mit thymeleaf - ein agiler prozess-beschleunigermagnolia mit thymeleaf - ein agiler prozess-beschleuniger
magnolia mit thymeleaf - ein agiler prozess-beschleuniger
 
Malte Wessel - Google web toolkit
Malte Wessel - Google web toolkitMalte Wessel - Google web toolkit
Malte Wessel - Google web toolkit
 
Schulung jQuery JavaScript-Bibliothek
Schulung jQuery JavaScript-BibliothekSchulung jQuery JavaScript-Bibliothek
Schulung jQuery JavaScript-Bibliothek
 
Fanstatic pycon.de 2012
Fanstatic pycon.de 2012Fanstatic pycon.de 2012
Fanstatic pycon.de 2012
 
Bestehende WordPress-Seiten auf Multisite migrieren
Bestehende WordPress-Seiten auf Multisite migrierenBestehende WordPress-Seiten auf Multisite migrieren
Bestehende WordPress-Seiten auf Multisite migrieren
 

Einbindung externer Webseiten via Javascript/jQuery

  • 2. Was soll erreicht werden? Der Inhalt einer Seite (bestehend aus zwei unabhängigen Bereichen) soll als Inhalt in einer anderen Webseite eingebunden/angezeigt werden. Es soll nicht grundlegend mit HTML (iFrame) oder PHP (cURL) gelöst werden Es soll eine technisch sichere Einbindung sein
  • 3. Hintergrund Ich habe mich mit diesem Thema beschäftigt, da vor Kurzem der Auftrag reinkam, wie auf der vorherigen Seite beschrieben, den Inhalt einer Seite in eine andere Seite zu laden. Auf der zu ladenden Seite war allerdings das Problem, dass diese mit Frames aufgebaut war und dadurch nicht simpel mit einem iFrame eingebunden werden konnte. Zudem gab es noch ein paar andere Probleme, die während der Umsetzung aufkamen. Diese und deren Lösungen kommen aber in späteren Seiten noch zur Geltung. Auf den nächsten Seiten sind beide Websites dargestellt: die zu ladende und die fertige Seite mit geladenem Inhalt.
  • 4. Hintergrund1. - Die Seite mit dem zu ladenden Inhalt
  • 5. Hintergrund2. - Die fertige Seite mit geladenem Inhalt
  • 6.
  • 7. Links im Menübereich werden im linken Div geladen
  • 8. Links im Fließtext sollen auch im linken Div geladen werden
  • 9. Das A-Z-Menü (links) „filtert“ den Menübereich alphabetisch (eigene Seiten).Link
  • 10. Grundlegender Ablaufplan Zwei statische Div-Container erstellen und mit CSS wie in der Vorlage ausrichten. (Dieser Punkt wird übersprungen) Laden der Start-Inhalte in beide Div-Container per jQuery. Alle Links mit jQuery deaktivieren via Javascript/jQuery die Link-Seiteninhalte manuell per Click in den linken Div laden Via Javascript/jQuery die Links des A-Z-Menüs manuell per Click in den rechten Div laden Links im Textbereich auch in den linken Div-Container laden
  • 11.
  • 12. 2. - Laden der Start-Inhalte1. - Vorbereitung: Code: getUrlScript.php functionmain() { $url = **GETURL**; //Dies ist ein Platzhalter, der PHP-Code dafür ist /für Vorzeigezwecke zu lang (aber leicht zu finden). $urlarr = parse_url($url); if (!stristr($urlarr['host'], 'www.trustedhost.de')) { die('URL not allowed'); } $content = **GETURL**; return $content; }
  • 13. 2. - Laden der Start-Inhalte2. - Inhalte laden mit jQuery & Ajax Jetzt da die Seiteninhalte ganz bequem geladen werden können, nun der jQuery-Code: $.ajax({ url: 'getUrlScript.php?url=www.trustedhost.de/startseite.html', success: function(data) { $('div#left').html(data); }, }); Hier wird als erstes dem zuvor erstellten getUrlScript die Start-URL der Seite, dessen Inhalte im linken Container anzeigt werden sollen übergeben. (Das ganze muss natürlich für den rechten Container auch geschrieben sein)
  • 14. 3. - Alle Links mit jQuery deaktivieren Jetzt müssen noch die Links mit jQuery deaktiviert werden, dass vorerst nichts passiert wenn man sie anklickt. Das funktioniert mit:$('div#left a').live('click', function(event){event.preventDefault(); Das “.live” muss dortstehen, da jQuery sonst den zuvorhineingeladenenInhaltnichtmiteinbezieht. Hierdurch werden alle Links im linken Div-Container deaktiviert. – Das gleiche muss nun natürlich mit den Links im rechten, Menü-Container, auch gemacht werden.
  • 15.
  • 16. 4. - Seiteninhalte manuell in linken Div laden2. - Laden des Inhalts Nun, kann der Inhalt wieder ganz einfach mit jQuery geladen werden; der zu ladende Inhalt steht jetzt in der Variable „loadurl“: $.ajax({ url: loadurl, success: function(data) { $('div#left').html(data); }, });
  • 17. 5. - Seiteninhalte aus A-Z-Menü manuell in rechten Div laden Um das A-Z-Menü eindeutig ansprechen zu können benötigt dieses eine Klasse oder eine ID – z.B. im <ul>-Element des HTML-Templates gesetzt. (hier z.B.: „a-z-menu“) Danach kann mit folgendem Code der Inhalt der links in den rechten Div geladen werden: $('div#leftul.a-z-menu a').live('click', function(event){ event.preventDefault(); varurl = $(this).attr('href'); varbaseurl = 'http://www.trustedhost.de/PFADZUMINHALT/'; if (url.indexOf('http') == -1) { url = baseurl + url; } varloadurl = 'getUrlScript.php?url=' +url; $.ajax({ url: loadurl, success: function(data) { $('div#right').html(data); (Klammern schließen) » Im Grunde also das gleiche, wie beim Laden der Inhalte in den linken Div-Container (siehe 4.), nur dass nicht alle Links angesprochen werden, sondern nur die der Klasse/ID „a-z-menu“.
  • 18. 6. - Links aus Textbereich auch in linken Div-Container laden 1. - Problematik: 1. Lösung Jetzt sollte natürlich, wenn im Fließtext des zuvor geladenen Inhalts ein Link vorkommt, dieser nicht auch im rechten Div-Container geladen werden, wie der Inhalt des A-Z-Menüs. Dafür gibt es zwei Lösungsmöglichkeiten: Man sucht sich im Inhalt der zu ladenden Seite eine Bezugsstelle, wie zum Beispiel Paragraphen (<p>-Tags), falls diese verwendet wurden, und schreibt folgenden Code: $('div#left p a').live('click', function(event) { » Danachwiedermit Javascript & jQuery den Inhaltprüfen und laden (6.2).
  • 19. 6. - Links aus Textbereich auch in linken Div-Container laden 1. - Problematik: 2. Lösung Die zweite Lösung ist zu empfehlen, wenn im Fließtext der einzubindenden Seite keine ansprechbaren Klassen oder IDs gesetzt wurden, aber das Menü, wie bei 5., die Klasse „a-z-menu“ besitzt : $('div#left' a).not('ul.a-z-menu a').live('click', function(event) { Der, nachdieserZeilefolgende, Code wirktsich auf alle Links imlinken Div-Container, abernicht auf die Links innerhalb des <ul>-Tags mitderKlasse “a-z-menu”. » Danachwiedermit Javascript & jQuery den Inhaltprüfen und laden (6.2).
  • 20. 6. - Links aus Textbereich auch in linken Div-Container laden2. - Umsetzung Nach einer der beiden, gerade besprochenen Zeilen, muss nun wieder folgender Code geschrieben werden: event.preventDefault(); varurl = $(this).attr('href'); varbaseurl = 'http://www.trustedhost.de/PFADZUMINHALT/'; if (url.indexOf('http') == -1) { url = baseurl + url; } varloadurl = 'getUrlScript.php?url=' + url; $.ajax({ url: loadurl, success: function(data) { $('div#left').html(data); (Klammern schließen) » Was wieder das gleiche, wie beim Laden der Inhalte in den linken Div-Container (siehe 4.) ist.
  • 21. RückblendeWas wurde nun geschafft? Es wird nun Standardmäßig immer erst eine Startseite in den jeweiligen Div-Container geladen. Es können die Inhalte der Links von rechts aus dem Menü nach links in den Content-Bereich geladen werden und die Inhalte der Links aus dem A-Z-Menü nach rechts in den Menübereich geladen werden, um dieses zu filtern. Es ist dafür gesorgt, dass Links die im Fließtext des geladenen Inhalts vorkommen, auch im linken Bereich geladen werden und nicht rechts im Menübereich. Das Problem, dass Ajax keine externen Seiten laden darf/kann, ist mit dem PHP-getUrlScript gelöst und gleichzeitig wurde damit noch die Sicherheitslücke, dass Inhalte von sämtlichen (bösartigen) Seiten von Dritten geladen und angezeigt werden könnten, geschlossen.
  • 22. Ausblick1. - Bilder Falls nun z.B. im Inhalt der geladenen Seiten noch Bilder vorhanden und relativ angegeben sind, müssen diese natürlich, entweder auf den eigenen Server kopiert, oder die Pfade mit folgendem Code wieder mit einer baseurl ersetzt/angepasst werden: function images(string) { varreturnstring = string.replace(/images/g,"http://www.trustedhost.de/PFADZUMBILD/"); returnstring = returnstring.replace(/../g,"http://www.trustedhost.de/PFADZUMBILD /"); return returnstring; » In dieser Funktion wird einmal nach „images/“ gesucht und einmal nach „../“ und jeweils mit der baseurl(zum Bild) ersetzt. Diese muss nur noch innerhalb des Ladens des Inhalts mit übergeben werden: $.ajax({ url: loadurl, success: function(data) { data = images(data); $('div#left').html(data); }, });
  • 23.