• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Mit Greasemonkey Sprache umstellen

Space Vampire

Senior HTML'ler
Ausgangssituation: In meiner Freizeit betreibe ich Geocaching. Dazu benutze ich die App C:GEO. Diese ist inoffiziell und hat einen dummen Nebeneffekt - sie stellt die Website immer auf Englisch um. Diesem Umstand möchte ich mit einem Greasemonkey-Script entgegenwirken.

Das Problem: Javascript kann ich in etwa so gut wie Suaheli. Darum habe ich mir ein ähnliches Script gesucht, versucht es mit mit Logik zu betrachten und für meine Zwecke umfunktioniert - leider funktioniert es nicht.

Das Script soll auf der Seite https://www.geocaching.com und allen seinen Unterseiten nach diesem Element suchen
HTML:
<div class="LocaleText">Choose Language</div>
Wenn dieser englische Text dort angezeigt wird, soll folgender Link aus der Sprachauswahl ausgeführt werden
HTML:
<a id="ctl00_uxLocaleList_uxLocaleList_ctl04_uxLocaleItem" href="javascript:__doPostBack(&#39;ctl00$uxLocaleList$uxLocaleList$ctl04$uxLocaleItem&#39;,&#39;&#39;)">Deutsch</a>
Wie gesagt - es funktioniert nicht so, wie ich es zusammengeschustert habe.

Das Script:
Code:
// ==UserScript==
// @name Geocaching.com always German
// @namespace *
// @include https://www.geocaching.com/*/*
// ==/UserScript==
var div = document.getElementsByClassName('LocaleText'),
pattern = /\(Choose Language$\)/;
if (div.textContent.match(pattern))
window.location.href = 'javascript:__doPostBack(&#39;ctl00$uxLocaleList$uxLocaleList$ctl04$uxLocaleItem&#39;,&#39;&#39;)';
Kann mir jemand sagen wo ich falsch liege? Danke im Voraus.
 
Werbung:
da mir das keine Ruhe gelassen hat, habe ich noch ein Wenig mehr gesucht und ein Script gefunden, das funktioniert.
HTML:
// ==UserScript==
// @name     GC.com immer Deutsch
// @include  https://www.geocaching.com/*/*/*
// @include  https://www.geocaching.com/*/*
// @include  https://www.geocaching.com/*
// @include  https://www.geocaching.com
// @version  1.0
// @history  1.0 first release
// @require  http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js
// @grant    GM_addStyle
// ==/UserScript==

var TargetLink          = $("a:contains('Deutsch')")
if (TargetLink.length)
    window.location.assign (TargetLink[0].href);

Allerdings hätte ich ganz gerne, dass noch eine zweite Bedingung erfüllt wird, bevor window.location.assign ausgeführt wird.
Nämlich dass hier nicht bereits das Wort "Sprachauswahl" steht:
HTML:
<div class="LocaleText">Sprachauswahl</div>
Denn wenn es bereits da steht, muss der Link nicht ausgeführt werden.
Ich habe in meiner JS-Legasthenie einige Varianten durchprobiert, die aber alle nur zur Disfunktion des gesamten Scriptes führten.
Jemand eine Lösung parat?
 
Vielleicht so?
Code:
var TargetLink          = $("a:contains('Deutsch')");
var LanguageSwitch      = $(".LocaleText");

if (TargetLink.length && !LanguageSwitch.length)
    window.location.assign (TargetLink[0].href);
 
Werbung:
Nicht ganz richtig, aber du hast mir den richtigen Schubs gegeben! :) Ich weiß zwar nicht, wo du LanguageSwitch so hernimmst, dass diese var weiß, wo sie nachgucken soll, aber damit funktioniert es auf jeden Fall.
Man muss nur "LocaleText" (ist ja die Class und somit immer zutreffend) aus deiner Lösung gegen "Deutsch" austauschen, dann geht es.
Vielen Dank. Soweit ich das beurteilen kann, macht das Script jetzt genau das, was es soll: Umschalten, falls Deutsch nicht die eingestellte Sprache ist, und auch nur dann!
 
Die beiden Variablen sind eigentlich überflüssig. Du könntest ebenso die Selektoren direkt verwenden.

jQuery ist übrigens einfach zu lesen. Die Syntax lautet:
Code:
// bei einem Wert getter
objekt.methode('foo');

// bei zwei Werten setter
objekt.methode('foo', 'bar');
 
Werbung:
Zurück
Oben