SharePointCommunity
Die deutschsprachige Community für SharePoint, Microsoft 365, Teams, Yammer und mit Azure

Sponsored by

Willkommen im Forum Archiv.
Einträge sind hier nicht mehr möglich, aber der Bestand von 12 Jahren SharePoint-Wissen ist hier recherchierbar.




Wert in Dataview an JavaScript übergeben

Unbeantwortet Dieser Beitrag hat 2 Antworten

Ohne Rang
94 Beiträge
bwstraub erstellt 10 Mai 2011 10:10
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Hallo,

ich stecke gerade fest. Folgendes möchte ich umsetzen:

Mit einer Datenansicht als Hilfsmittel hole ich mir den Wert der Servervariablen HTTP_ACCEPT_LANGUAGE. Damit werden die eingestellten Browsersprachen angezeigt (das liefert z.B.: "de-DE,en-US;q=0.5").

So kann ich herausfinden, welche primäre Sprache im Browser des Client eingestellt ist. Damit möchte ich nun eine automatische Weiterleitung entweder auf eine deutsche oder eine englische Seite einrichten.

Problem:

Die Variable liefert einen korrekten Wert, ich kann diese auch als Parameter an eine JavaScript-Funktion binden, um von dort aus die neue Seite aufzurufen.

Ich möchte aber eine automatische Weiterleitung, d.h. die Funktion soll ja nicht z.B. als onclick-Event an einem Link hängen. Wenn ich das aber als onload-event an <body> hänge, ist dort ja mein Parameter aus der Datenansicht noch gar nicht bekannt.

Weiterhin kann man anscheinend Parameter einer Datenansicht nicht innerhalb eines <script>-Tag verwenden (sonst wär's ja auch wieder einfach).

So schaut der Code aus, wenn ich den Funktionsaufruf auf einen Link lege (der Code liegt also innerhalb einer Data View), $BrowserLanguage ist der Parameter, der mir die Sprache liefert:

<a href="#" onclick="javascript:selectLanguage('{substring($BrowserLanguage,1,2)}')">Zur Seite...</a>

<script type="text/javascript">
function selectLanguage(lang) {
window.navigate(&quot;../&quot; + lang);
}
</script>

Kennt jemand einen Weg, dass diese Funktion automatisch ausgeführt wird und nicht erst mit Anklicken?

Habe schon <body onload="..."> probiert und auch "_spBodyOnLoadFunctionNames.push", aber beides hat nicht funktioniert (vielleicht habe ich auch etwas falsch gemacht).

jquery mit $(document).ready(handler) erscheint mir auch nicht das Richtige (?).

Danke für Tipps :-)

Grüße, Bernhard

Nachtrag: Eine reine JavaScript-Lösung, die sauber die Browsersprache ermittelt, scheint es nicht zu geben. Das habe ich auch schon in verschiedenen Varianten getestet. HTTP_ACCEPT_LANGUAGE scheint die sicherste Lösung zu sein.

Alle Antworten

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 10 Mai 2011 11:22
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Baue Deine Funktion so um:

function selectLanguage() {
window.navigate("deineUrl/subsite/{substring($BrowserLanguage, 1, 2)}");
// oder window.location.href = "neueUrl";
}

D.h. man kann sehr wohl XSL innerhalb von <script> Tags verwenden. Beachte dabei die unterschiedlichen Klammern!

Jetzt brauchst Du nur noch ein _spBodyOnLoadFunctionNames.push("selectLanguage");

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
94 Beiträge
bwstraub Als Antwort am 10 Mai 2011 11:51
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Danke! Da hatte ich mich vor lauter Ausprobieren verrannt. Du hast Recht, man kann XSL im <script>-Tag verwenden.

Dieser Artikel hat mir auch noch weiter geholfen (danach habe ich lange gesucht...):
http://blog.sharepointalist.com/2009/04/sharepoint-moss-javascript-xsl-dataview.html

So sieht nun die Lösung aus, sogar ohne Funktionsaufruf:

<script type="text/javascript">
window.location.href=&quot;../<xsl:value-of select="substring($BrowserLanguage,1,2)" />&quot;;
</script>

Eine alternative Lösung wäre noch dieses gewesen (nicht ganz nach der reinen Lehre..., das gehört ja eigentlich in den Header und nicht in den Body vom HTML, funktioniert aber trotzdem):

<meta http-equiv="refresh" content="0; url=../{substring($BrowserLanguage,1,2)}"></meta>


Bernhard Straub - MindBusiness GmbH (www.mindbusiness.de)