Schlagwort-Archiv: RSH

Die RSH-Bibliothek und Safari / the rsh-library and Apples Safari

You will find the english version below.

In einem Projekt, an dem ich für meine Firma im Moment arbeite, hatten wir das Problem, dass wir in einer AJAX-Anwednung den Zurück-Button benutzbar halten mussten. Die Varianten diese Funktionalität bereit zu stellen waren entweder eine eigene Lösung zu finden oder eine schon fertige (möglichst in allen gängigen Browsern lauffähige) Bibliothek zu verwenden. Die Wahl fiel, auf Grund unterschiedlicher Widrigkeiten – allen voran die mangelnde Erfahrung mit Projekten dieser Art, sehr schnell auf eine fertige Lösung. Ich wusste bereits von einer Variante, die das xajax-Framework verwendet, jedoch haben wir diese nicht verwendet – eine weitere Vorraussetzung war, dass die Bibliothek sich problemlos im Zusammenspiel mit dem „Prototype JavaScript Framework“ integrieren lassen musste. Die Wahl fiel dann letztlich auf die „Real Simple History“ RSH Bibliothek.

Aus dieser Wahl ergab sich jedoch, nach einigem Testen, ein Problem: sie ist in ihrer aktuell verfügbaren Version (0.6) nur bis Safari 3.0.x lauffähig. Da sich der Safari ab Version 3.1.x ähnlich verhält wie der Firefox, musste die „Browserweiche“ in RSH ein wenig umgearbeitet werden. Letztlich habe ich also an der Stelle, an der die jeweiligen Browser heraus gefiltert werden, für den Safari ab Version 3.1 noch eine weitere Aufteilung geschaffen. Mit dieser Änderung war die Bibliothek dann voll für unsere Zwecke einsetzbar. Die Änderungen findet ihr direkt im Anschluss an die englische Version dieses Beitrages. Da ich nur die rsh.js angepasst habe, werde ich auch nur diese hier zum Download anbieten. Zur vollständigen Version gehts hier: http://code.google.com/p/reallysimplehistory/

English version:

Last week, as I was working for an actual project. We had to provide the back-button functionality also in an AJAX-based website. The 2 choices we had, were to develop everything ourselves or use an allready tested open source-library. We decided for the second one an at least found the „Really Simple History“ (RSH) library.

The problem was, that this library only worked fine with Safari until version 3.0.x. So I had to change the browser-detection a little bit, after all, Safari works like Firefox since Version 3.1.0 and only this point had to be changed. Now the adapted version runs for Safari in all versions since 2.0.3. Because I only altered the rsh.js, I will only provide this file here. In the code snippet afterwards you will find my changes, too. For full version have a look at: http://code.google.com/p/reallysimplehistory/

/* original */
/*set user-agent flags*/
var UA = navigator.userAgent.toLowerCase();
var platform = navigator.platform.toLowerCase();
var vendor = navigator.vendor || "";
if (vendor === "KDE") {
	this.isKonqueror = true;
	this.isSupported = false;
} else if (typeof window.opera !== "undefined") {
	this.isOpera = true;
	this.isSupported = true;
} else if (typeof document.all !== "undefined") {
	this.isIE = true;
	this.isSupported = true;
} else if (vendor.indexOf("Apple Computer, Inc.") > -1) {
	this.isSafari = true;
	this.isSupported = (platform.indexOf("mac") > -1);
} else if (UA.indexOf("gecko") != -1) {
	this.isGecko = true;
	this.isSupported = true;
}
/* new version */
/*set user-agent flags*/
var UA = navigator.userAgent.toLowerCase();
var platform = navigator.platform.toLowerCase();
var vendor = navigator.vendor || "";
if (vendor === "KDE") {
	this.isKonqueror = true;
	this.isSupported = false;
} else if (typeof window.opera !== "undefined") {
	this.isOpera = true;
	this.isSupported = true;
} else if (typeof document.all !== "undefined") {
	this.isIE = true;
	this.isSupported = true;
} else if (vendor.indexOf("Apple Computer, Inc.") > -1) {
	var safariVersion = navigator.appVersion.substr(navigator.appVersion.indexOf("Safari")-6, 3);
	if (safariVersion < 3.1) {
		this.isSafari = true;
		this.isSupported = (platform.indexOf("mac") > -1);
	}
	else
	{
		this.isGecko = true;
		this.isSupported = true;
	}
} else if (UA.indexOf("gecko") != -1) {
	this.isGecko = true;
	this.isSupported = true;
}

Die angepasste Version von rsh.js / The adapted version of rsh.js