• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

Weiterleitung per Javascript funktioniert nicht in Safari

Dima_HH

New member
Hi Leute,
ich bin ein Javascript noob.

Brauche aber auch nur eine kleine Funktion.
Es handelt sich um eine Weiterleitung:
Code:
<script type="text/javascript"> 
	var language = window.navigator.userLanguage || window.navigator.language;
	
	if (language == "fr") {
		window.location = "http://fr.meineseite.com/";
	} else if (language == "es") {
		window.location = "http://es.meineseite.com/";
	} else if (language == "de") {
		window.location = "http://de.meineseite.com/";
	} else if (language == "it") {
		window.location = "http://it.meineseite.com/";
	}	
</script>

Meine erste Frage: Stimmt der code ?
Er funktioniert bei mir zurzeit bei Firefox, aber nicht auf Safari.
Javascript ist in Safari aktiviert.
Habe keine Ahnung wo der Fehler ist.

Hoffe ihr könnt mir helfen.
Vielen Dank im Voraus ;)
 
Der Code sieht ganz gut aus. Was sagt denn die Fehlerkonsole im Safari? Funktioniert der Code in den anderen Browsern, IE, Chrome?
 
Was sagt denn die Fehlerkonsole im Safari? Funktioniert der Code in den anderen Browsern, IE, Chrome?

Hi rico2009,
die Fehlerkonsole sagt leider garnichts,
der code funktioniert wie bisher getestet auf: OSX: Firefox, Chrome | Windows: Chrome
Firefox und Chrome auf Windows wollen nicht funktionieren und IE auch nicht obwohl window.navigator.userLanguage ja angeblich extra für IE ist.
Da die Masse hauptsächlich Windows nutzt wäre mir IE und Firefox sogar wichtiger als Safari.

Verwende bitte "window.location.href" (SelfHTML) - klappt in allen Browsern!
Hi SteelWheel,
habe "window.navigator.userLanguage || window.navigator.language" gegen "window.location.href" ersetzt.
Funktioniert noch auf OSX: Firefox, Chrome. Safari will leider noch immer nicht :(
Windows kann ich gerade nicht testen, werde ich später tun und die Ergebnisse berichten. :)

Danke schonmal für eure Hilfe.
 
Zuletzt bearbeitet:
Dima_HH schrieb:
habe "window.navigator.userLanguage || window.navigator.language" gegen "window.location.href" ersetzt.
Nee SteelWheel meinte:
window.location.href = "http://fr.meineseite.com/";

Was ich aber eigentlich loswerden wollte mansche Browser spucken die Sprache so aus:
de-DE oder en-US.
Da stehts geschrieben:
https://alicoding.com/detect-browser-language-preference-in-firefox-and-chrome-using-javascript/

Mache aus Sicherheitsgründen in dein if noch ein oder also:
(language == "de" || "de-DE")

Nun kann es aber Passieren das da statt en-US auch en-UK steht, dann geht er auch nicht in das if rein. Da ist es ratsam eine regex zu machen die nach den Minus alles löscht, DU brauchst ja nur die ersten zwei Zeichen.
 
Hi xorg,
achsoo ja logisch ^^,
ok habe jetzt "window.navigator.userLanguage || window.navigator.language" wieder zurück gepackt und "window.location" gegen "window.location.href" ersetzt. (Komisch das es trotz meines Missverständnisses funktioniert hatte o_O)

(language == "de" || "de-DE") Die andere Schreibweise der Sprachen habe ich jetzt auch so gemacht wie du es gezeigt hast.
Das Gute ist, dass ich en_US usw. garnicht abfragen brauche, da ich nur "de, es, fr und it" brauche.
Auf die "en" Seite leitet das "else" weiter wenn keine der anderen Sprachen entdeckt wurde.

Jetzt gibt es allerdings ein ganz anderes Problem -.-
Und zwar wird die erste if Bedingung (language == "fr" || "fr-FR") als erfüllt gesehen, wodurch ich direkt auf die fr Seite geleitet werde.
Was ist da bloß los -.-

Hier nochmal der aktuelle Code:

Code:
<script type="text/javascript"> 
	var language = window.navigator.userLanguage || window.navigator.language
	
	if (language == "fr" || "fr-FR") {
		window.location.href = "http://fr.#.com/";
	} else if (language == "es" || "es-ES") {
		window.location.href = "http://es.#.com/";
	} else if (language == "de" || "de-DE") {
		window.location.href = "http://de.#.com/";
	} else if (language == "it" || "it-IT") {
		window.location.href = "http://it.#.com/";
	} else {
		window.location.href = "home.html";
	}	
</script>
 
Ok habe gerade was geschrieben was noch vom Moderator freigeschaltet werden muss,
dadrin ist ein Fehler (statt "de-DE" steht da "de_DE" bei allen Sprachen mit _ statt -)
Habe den Fehler berichtigt und trotzdem funktioniert es nicht.

Hoffe Beitrag wird bald freigeschaltet :)
 
Dima_HH schrieb:
Komisch das es trotz meines Missverständnisses funktioniert hatte o_O
Ja das ist in der tat "konisch".

Dima_HH schrieb:
(language == "de" || "de-DE")
Ei mir ist da ein Fehlerchen unterlaufen.

(language == "de" || language == "de-DE")
so ist es richtig.

Hab jetzt was mit 'ner Regex gemacht:

Code:
var language = navigator.languages ? navigator.languages[0] : (navigator.language || navigator.userLanguage)//window.navigator.userLanguage || window.navigator.language;   
        language = language.split(/\_|-/g)[0];

	if (language == "fr") {
		window.location.href = "http://fr.#.com/";
	} else if (language == "es") {
		window.location.href = "http://es.#.com/";
	} else if (language == "de") {
		window.location.href = "http://de.#.com/";
	} else if (language == "it") {
		window.location.href = "http://it.#.com/";
	} else {
		window.location.href = "home.html";
	}

navigator.languages ? navigator.languages[0]
Heißt soviel wie ist" navigator.languages" verfügbar nimm das oder das andere hinter dem Doppelpunkt

language = language.split(/\_|-/g)[0];
/\_|-/g ist eien Regex die überprüft ob ein - oder _ vorkommt und die Split Methode teilt das in ein Array auf. Also en_US wird zu [en,US], die 0 ist der erste arrayindex also steht in Langage nur en.

Was besseres ist mir gerade nicht eingefallen vielleicht weiß einter der Admins was schlaueres.

Habe das mit Safari in Windows gestest geht bei mir. Wenn es unter OSX nicht geht weiß ich auch nicht weiter.
 
Wow, ich blicke durch dieses "Regex" Ding ehrlich gesagt nicht durch, aber es funktioniert.
Ich danke dir vielmals xorg1990 :D

Das erste mal, dass es auf OSX Safari funktioniert.
Firefox und Chrome gehen auf OSX auch.
Windows werde ich gleich mal testen. :)

EDIT: Auf Windows funktioniert es jetzt auch mit allen Browsern die ich getestet habe :D
Auf IE, Firefox & Chrome!
Auch auf dem iPhone Safari funktionierts.

Vielen Dank xorg1990 :)
 
Zuletzt bearbeitet:
na dann ist ja alles schick:redface:
Regex == Reguläre Ausdrücke und das wiederum ist wirklich etwas spezielles aber absolut valide Programmierung.
Es gibt Regex online Tester/Debugger und verschiedene andre Hilfen einfach mal googeln wen man nicht weiter kommt.

MfG
xorg1990
 
RegEx für Einsteiger: ISBN 9783868999402 ... natürlich O'Reilly ^^ Empfinde ich als "sehr gut" - muss mal wieder drin lesen, da man dann doch gern wieder "bequem" wird.

Der RegEx oben ist /\_|-/g - der wichtige Teil steht zwischen den "Begrenzern" /.../g. Also bleibt quasi nur: \_|-

\ entwertet (wie in MySQL oder PHP) - wirste bestimmt kennen. Pipe (|) ist "oder" ... da kenne ich DEUTLICH fiesere (so mit Referenz auf vorige Ergebnisse etc.).

Statt "if" könntest Du oben noch "switch()" nehmen ... und von der Usability hätte ich ja auch wieder Einwände. :D (Umleitung lieber vielleicht schon serverseitig, um den ersten Aufbau zu sparen?!)

Aber schön, dass es funzt.
 
Zurück
Oben