Wikipedia:Technik/Skin/JS/Obsolet

aus Wikipedia, der freien Enzyklopädie
Zur Navigation springen Zur Suche springen

Obsolete JavaScript-Praktiken im Wiki-Projekt


Diese Seite macht auf Funktionen und einige Variablen im JavaScript-Code für Wiki-Projekte aufmerksam, die veraltet sind. Teilweise sind sie als „deprecated“ klassifiziert; einige sind bereits nicht mehr vorhanden.

Wo es möglich ist, wird eine alternative Lösung oder der vorgesehene Nachfolger angegeben.

„Veraltet“ bedeutet, dass Elemente noch über längere Zeit verfügbar sein werden, jedoch im Rahmen ohnehin notwendiger Überarbeitungen möglichst ersetzt werden sollten. Weil sie über Jahre hinweg benutzt wurden und in vielen Skripten noch vorhanden sind, werden inzwischen nicht mehr vorhandene Features hier genauso zu Referenzzwecken dokumentiert.

Grundsätzlich sollen einzelne globale Variablen vermieden werden. Das bedeutet, dass alle zukünftig dauerhaft bereitgestellten Funktionen in das mw-Objekt integriert werden sollen. Dieses ist in Komponenten gegliedert, wodurch übersichtlich rückverfolgt werden kann, wozu Einzelfunktionen oder gar einzelne Variablen inhaltlich gegliedert gehören. Insbesondere ist klar, dass es sich um von MediaWiki (MW) bereitgestellte Funktionen handelt. Das ist ansonsten nicht ersichtlich; es kann sich um irgendwelche Benutzer- oder Systemfunktionen handeln. Genauso wird das in den jQuery-Ressourcen deutlich.

Bis Februar 2011 waren die Wiki-Parameter nur als einfache (globale) JavaScript-Variablen verfügbar. Das war übergangsweise noch ein Jahrzehnt möglich gewesen; bei Neuentwicklungen und Überarbeitungen von Skripten müsste aber nun auf den neuen Zugriff mittels mw.config.get("Name") umgestellt werden. Zugriffe führten seit Januar 2015 auch in der Fehlerkonsole zu Warnungen: phab:T58550 (Bugzilla:56550) / phab:T72470 (Bugzilla:70470) / phab:T35837 (Bugzilla:33837).

Am 19. April 2021, nach einem Jahrzehnt Gelegenheit zur Migration, wurde die Unterstützung der globalen Variablen eingestellt. phab:T72470

Die Migration belastete weltweit jeden einfachen Leser jeder Wiki-Seite mit jedem Seitenaufruf. Schließlich war nur noch eine mikroskopische Anzahl an Zugriffen übrig, wohl weniger als ein Milliardstel der Aufrufe, wo angemeldete Benutzer auch nach einem Jahrzehnt ihr JavaScript nicht gepflegt hatten.

Die Funktionen in den wikibits.js der früheren Jahre waren hingegen alle auf der globalen Ebene definiert und unterschieden sich nicht von sonstigen Ursprüngen. Zwischen Hunderten Funktionen war schließlich keine Linie mehr erkennbar; hinzu kamen Optionsvariablen. Namenskonflikte sind unvermeidlich; es ist weiterhin unklar, was zu tun ist, um diese Funktion bereitzustellen.

2011 wurde mit MW 1.17 gleichzeitig mit dem mw-Objekt der ResourceLoader eingeführt.

Siehe dazu auch:

Einbindungen[Quelltext bearbeiten]

Hier hat nach einem anfänglichen Schub 2011 die Entwicklung für Programmierer aus dem Benutzerbereich stark nachgelassen. Für das einfache Einbinden einer Seite mit etwas JavaScript-Code gibt es noch keine ewigwährende Lösung.

  • Zunächst hatte man die eigentlich für einen anderen Zweck vorgesehene Funktion mw.loader.load() kurzfristig auch für das Laden über eine URL verfügbar gemacht.
  • Gesprächsweise gibt es Überlegungen, eine Funktion mw.util.load() zu definieren, die auf komfortable Weise und möglichst auch im Wikilink-Format Ressourcen-Einbindungen von Wiki-Seiten ermöglicht.
  • Im Sommer 2012 sind alle Modernisierungspläne zum Erliegen gekommen.
  • Ebenfalls nicht weitergeführt wurden die Pläne, auf einfache Weise auch durch Projekte und schließlich einzelne Benutzer Module zusammenstellen zu lassen, die dann mittels ResourceLoader geladen werden können. Dies ist zurzeit nur den weltweiten Modulen und den als Gadgets aktivierbaren Ressourcen möglich.
  • Für nur gelegentlich programmierende Benutzer dürfte es eine ziemliche Hürde sein, ein Modul zusammenzustellen. Dies bedarf erheblich mehr Hintergrundwissen, als einfach nur ein paar Zeilen JavaScript auf eine Benutzerseite zu schreiben.

importScript()[Quelltext bearbeiten]

  • Zweck: Externe Skript-Seite einbinden
  • Alt: importScript("Benutzer:Mir/MeinExtra.js");
  • Ersatz: mw.loader.load() – leider zurzeit noch nicht sehr komfortabel

includePage()[Quelltext bearbeiten]

Benutzung und Wirkung sind grundsätzlich ähnlich wie importScript (tatsächlich nur eine Art Weiterleitung). Die Funktion ist völlig veraltet und nur lokal in der deutschsprachigen Wikipedia verfügbar; sie sollte nicht mehr neu benutzt und dringend ersetzt werden.

importScriptURI()[Quelltext bearbeiten]

  • Benutzung und Wirkung wie importScript, jedoch mit Angabe einer beliebigen URL als Parameter.
  • Ersatz: mw.loader.load() – in beiden Fällen muss eine URL angegeben werden; durch die Aktualisierung entstehen keine Nachteile.
  • Mit 1.26wmf2 (April 2015) wird die Verwendung dieser Funktion als deprecated protokolliert. Die Funktion stammt aus wikibits.

importStylesheet()[Quelltext bearbeiten]

  • Zweck: Externe CSS-Seite einbinden
  • Alt: importStylesheet("Benutzer:Ich/Stildatei.css");
  • Ersatz: mw.loader.load()

Siehe importScript.

importStylesheetURI()[Quelltext bearbeiten]

 mw.loader.load("https://de.wikipedia.org/w/index.php?title=Benutzer:PerfektesChaos/shared.css&action=raw&ctype=text/css",
                "text/css");
  • Mit 1.26wmf2 (April 2015) wird die Verwendung dieser Funktion als deprecated protokolliert. Die Funktion stammt aus wikibits.

document.write()[Quelltext bearbeiten]

Recht gefährlich und inzwischen völlig veraltet ist es, mit document.write() in HTML <script> irgendwo in die Wiki-Seite zu schreiben. Dringendst zu entfernen!

  • Unter Firefox 9 wurde beobachtet, dass durch dieses Schreiben das weitere Laden oder Ausführen von Skripten auf der Seite abgebrochen wurde.
  • Mit Firefox 10 und Chromium 17 kann dies im Wiki-Kontext überhaupt nicht mehr funktionieren:[1] (nur noch mit Blockierung und Work-around zu handhaben).

Diese Funktion war in den 1990ern dazu gedacht gewesen, in einem aufpoppenden Fenster ein leeres Dokument zu beschreiben. Sie ist nicht mehr dazu geeignet, irgendwo in die komplexe Wiki-Seite hineinzuschreiben. Das ist nur gezielt im DOM sinnvoll.

Seit dem 6. August 2015 (1.26wmf17) ist das auch nicht mehr verfügbar.[2] Es führt inzwischen in den Browsern zur Zerstörung der darzustellenden Seiten.

URL[Quelltext bearbeiten]

Alle URL-Angaben, mindestens aber diejenigen für Wiki-Projekte, müssen protokoll-relativ oder über https:// vorgenommen werden; siehe Hilfe:Verschlüsselte Verbindung #Hinweise für die Praxis sowie unten.

addOnloadHook()[Quelltext bearbeiten]

Früher wurden die Skripte in der HEAD-Sektion des Dokuments geladen. Zu diesem Zeitpunkt war der eigentliche Inhalt des Dokuments (BODY) noch nicht bekannt. Die Ausführung von Funktionen, die auf den Inhalt des Dokuments wirken sollten oder von ihm abhingen, musste deshalb verzögert werden. Zu diesem Zweck wurde eine Funktion addOnloadHook() benutzt. Außerdem konnte man dadurch sicherstellen, dass alle nacheinander (synchron) geladenen anderen Skripte bereit sind; auch das ist mit dem inzwischen üblichen asynchronen (parallelen) Laden nicht mehr gewährleistet.

Mit Einführung von MediaWiki 1.17 werden im Frühjahr 2011 die Skripte am Ende der BODY-Sektion des Dokuments geladen. Die weitere Verwendung von addOnloadHook() ist deshalb nicht mehr erforderlich – kann sogar schädlich wirken.

  • addOnloadHook(Funktionsname) sollte im Rahmen von Überarbeitungen soweit möglich durch den unmittelbaren Aufruf von Funktionsname() ersetzt werden.
  • Hängt die Funktion vom Dokumenteninhalt ab oder benutzt sie jQuery-Methoden, sollte statt addOnloadHook(Funktionsname) immer jQuery(document).ready(Funktionsname) bzw. $(Funktionsname) benutzt werden.
  • Bei allen althergebrachten Verwendungen hatte man immer nur einmalig die Hook-Funktion geladen. Modernere Anwendungen wie LivePreview und VisualEditor können es in bestimmten Bearbeitungssituationen notwendig machen, die Hook-Funktion bei jeder Änderung des Inhalts erneut auszuführen; siehe dazu hier.
  • Der ResourceLoader bietet brauchbare Hilfsfunktionen an, insbesondere .using(), um die Bereitstellung anderer Skripte abzuwarten.

Ansonsten kann addOnloadHook() zu einem Deadlock führen, wenn mehrere Skripte unterschiedlicher Autoren zusammenwirken und auch noch von jQuery abhängen. Weil addOnloadHook() im günstigsten Fall nutzlos ist und die Angelegenheiten nur verkompliziert, sollte es entfernt werden.

Seit Oktober 2013 löst die Funktion eine deprecated-Meldung in der Fehlerkonsole aus. Die Funktion stammt aus wikibits.

runOnloadHook(), hookEvent()[Quelltext bearbeiten]

Dies waren interne Funktionen, die addOnloadHook() ansteuerten, und in Benutzerskripten eigentlich kaum vorkommen können. Wo trotzdem vorhanden, sollten sie baldmöglichst entfernt werden. Mittlerweile sind sie wirkungslos. Sie stammen aus wikibits.

Sonstige Funktionen[Quelltext bearbeiten]

appendCSS()[Quelltext bearbeiten]

Siehe mw.util.addCSS() – ohne Änderung an Parametern oder Funktion ersetzbar. Seit April 2017 nicht mehr aufrufbar. Die Funktion stammt aus wikibits.

addPortletLink()[Quelltext bearbeiten]

Siehe mw.util.addPortletLink() – ohne Änderung an Parametern oder Funktion ersetzbar. Seit April 2017 nicht mehr aufrufbar. Die Funktion stammt aus wikibits.

Benutzerbenachrichtigung[Quelltext bearbeiten]

  • jsMsg() – zurzeit noch als mw.util.jsMessage() mit zwischenzeitlich geänderter Funktion („Bubble“ für wenige Sekunden statt statischer Anzeige), auch diese inzwischen überholt.
  • messageBox() – zwischenzeitlich durch messageBox() in einem jQuery-Modul simuliert. In MW 1.20 ist diese ebenfalls entfernt worden.

Browser-Analyse[Quelltext bearbeiten]

Einzelvariablen wie beispielsweise ff2_bugs, is_chrome, … is_safari, webkit_match, … sollten ersetzt werden durch Funktionen aus dem jquery.client-Modul, also das Objekt jQuery.client – oder weiter gehende Analysen, ob die gewünschte Funktionalität unterstützt wird. Seit November 2013 liefern alle diese Variablen nur noch false.

edit.js[Quelltext bearbeiten]

Die beiden Funktionen

  • addButton()
  • insertTags()

wurden in der alten Form noch unterstützt, sollten aber korrekt auf mw.toolbar.addButton() und mw.toolbar.insertTags() umgestellt werden. Ende 2018 dann komplett weggefallen, nachdem dies im April 2017 angekündigt wurde.

  • Das Array mwEditButtons war nunmehr als mw.toolbar.buttons zu verwenden. Ende 2018 dann mit den EditButtons weggefallen.

Siehe mw.toolbar.

Tastenbelegungen, Werkzeugleisten[Quelltext bearbeiten]

  • Die beiden Elemente ta[] und akeytt() waren seit Jahren funktionslos, aber vorhanden gewesen.
    Mit MW 1.19 muss ihre Definition entfernt werden; ihr Aufruf führt dann zu einem Fehler und einem Abbruch der Skriptbearbeitung.
  • Die beiden Arrays mwCustomEditButtons[] und mwEditButtons[] werden ab Herbst 2013 nicht mehr unterstützt.
    • Es waren nur noch leere Arrays verfügbar.
    • Im Debug-Modus wird in der Konsole eine Warnung gezeigt.
    • Ersatz durch mw.toolbar; Ende 2018 dann weggefallen.
  • Tastenkombination im Tooltip anzeigen:
    • tooltipAccessKeyPrefix, tooltipAccessKeyRegexp, updateTooltipAccessKeys()
    • Ersatz durch jquery.accessKeyLabel
    • September 2018 aus dem Code entfernt.
    • mw.util.updateTooltipAccessKeys($e) ist auch nicht mehr aktuell, jetzt per $e.updateTooltipAccessKeys()

ajax.js[Quelltext bearbeiten]

Alle Funktionen mit sajax_*** usw. sollten dringend ersetzt werden. Neue Wege unter mw.API. Seit Mitte August 2015 nicht mehr verfügbar.

jquery.json[Quelltext bearbeiten]

Diese Unterstützung für ältere Browser ist mit MW 1.25 (seit Oktober 2014) nicht mehr verfügbar.

  • Ersatz durch das Standard-Browser-Objekt JSON mit der Funktion JSON.stringify().
  • Dabei auch gleich dasselbe Standard-Objekt JSON.parse() verwenden statt den bisherigen Umweg über eine noch bestehende jQuery.parseJSON() zu nehmen.

Untermodule zu wikiEditor (Werkzeugleiste 2010)[Quelltext bearbeiten]

2018/2019 wurden die Untermodule zu größeren Einheiten zusammengefasst, da ihr unabhängiger Einsatz keine Vorteile bringt und sie ohnehin geladen werden müssen (phab:T165112). Global wurde dies auch aus allen sichtbaren Benutzerskripten elminiert. Betroffen waren:

  • jquery.wikiEditor.core
  • jquery.wikiEditor.dialogs
  • jquery.wikiEditor.dialogs.config
  • jquery.wikiEditor.toolbar
  • jquery.wikiEditor.toolbar.config
  • jquery.wikiEditor.toolbar.i18n
  • ext.wikiEditor
  • ext.wikiEditor.core
  • ext.wikiEditor.dialogs
  • ext.wikiEditor.styles
  • ext.wikiEditor.toolbar

Konfigurationsvariable[Quelltext bearbeiten]

Siehe dazu Projekt- und seitenspezifische Konfigurationsvariable.

loadedScripts[Quelltext bearbeiten]

Dieses Array zeigte früher, welche Skripte bereits geladen sind. Das ist heute nicht mehr sinnvoll nutzbar; für Module ist die Funktion .loader.getState() des ResourceLoader einsetzbar.

Breaking Changes[Quelltext bearbeiten]

November 2013[Quelltext bearbeiten]

Mit der MW-Version 1.23 werden eine Reihe überkommener Elemente nicht mehr unterstützt, bei denen dies bereits 2011 angekündigt wurde.[3]

Dies wird in der Regel nicht zu einem Absturz des JavaScript wegen Syntaxfehler führen, jedoch tritt die erwartete Funktionalität nicht ein. Die Werte sollten zwar den richtigen Datentyp haben, sind ansonsten jedoch einheitlich leer, false, Null oder was immer. Einige Funktionen haben auch noch eine Gnadenfrist erhalten und liefern vorläufig noch das bisherige Ergebnis; sie sollten nun aber dringend aktualisiert werden.

Jeder nicht mehr gültige Zugriff wird in der JavaScript-Fehlerkonsole des Browsers im Detail protokolliert, und es werden Abhilfen benannt. Das setzt in der Regel voraus, dass an die URL der Seite ?debug=true bzw. &debug=true angehängt wird.

Konkret sind betroffen:

  • DOM-Hilfsfunktionen usw.:
    • addClickHandler(), addHandler(), changeText(), getElementsByClassName(), getInnerText(), killEvt(), removeHandler()
    • Ersatz durch jQuery
  • Hook usw.:
    • doneOnloadHook, hookEvent(), onloadFuncts[], runOnloadHook()
    • Siehe Hooks
  • Browser-Analyse:
    • clientPC, ff2_bugs, ie6_bugs, is_chrome, is_chrome_mac, is_ff2, is_ff2_win, is_ff2_x11, is_gecko, is_opera, is_opera_95, is_opera_preseven, is_safari, is_safari_win, opera6_bugs, opera7_bugs, opera95_bugs, webkit_match, webkit_version
    • Ersatz durch jQuery.client
  • Checkbox:
    • addCheckboxClickHandlers(), checkboxClickHandler(), checkboxes[], lastCheckbox, setupCheckboxShiftClick()
    • Ersatz durch jquery.checkboxShiftClick
  • Toolbar (2006):
    • 2018 weggefallen
  • Spinner:
    • injectSpinner(), removeSpinner()
    • Ersatz durch jquery.spinner
  • HTML escapes:
    • escapeQuotes(), escapeQuotesHTML()
    • Ersatz durch mw.html
  • Kurze Nachricht anzeigen:
  • Tastenkombination im Tooltip anzeigen:
    • tooltipAccessKeyPrefix, tooltipAccessKeyRegexp, updateTooltipAccessKeys()
    • Ersatz durch jquery.accessKeyLabel
  • Verschiedene Hilfsfunktionen:

Die Details lassen sich dem Quellcode entnehmen:

Oktober 2014[Quelltext bearbeiten]

Mit der MW-Version 1.25 werden einige Funktionen nicht mehr unterstützt, bei denen dies teils länger angekündigt war; teils auch sehr kurzfristig.

  • mw.user.name()
  • mw.user.anon()
  • mediawiki.api Komponenten ok und err
  • mediawiki.api.category Parameter async
    • Es gibt nur noch asynchrone Ausführung.
  • Modul jquery.json
    • Dies hatte ältere Browser unterstützt. Nach Abschaltung des Supports für den letzten Vertreter IE7 Mitte September 2014 waren binnen zwei Wochen alle Einbindungen anzupassen.
    • Es ist das in den neueren Browsern verfügbare Objekt JSON zu verwenden; hier: JSON.stringify() usw.

Dezember 2014[Quelltext bearbeiten]

Eine Migration, die den Übergang nach jQuery 1.9 noch unterstützt hatte, entfiel zum 17. Dezember 2014 mit 1.25wmf12 (gerrit:137168; deprecated since MediaWiki 1.24).

Die betroffenen jQuery.Funktionen sind aber teils exotisch; waren eher für interne Zwecke vorgesehen und wurden überwiegend hier nie verwendet.

Lediglich abzulösen wäre durch Umstellung auf jQuery 1.9:

Juni 2015[Quelltext bearbeiten]

Das bislang früher oder später auf jeder Seite aktivierte Modul jquery.mwExtension ist seit Ende Juni 2015 veraltet und dementsprechend standardmäßig nicht mehr eingebunden.

  • Es kann weiterhin genutzt werden, muss aber explizit mittels mw.loader.using() angefordert werden.
  • Betroffen sind in erster Linie die Funktionen escapeRE() trimLeft() trimRight() – sie sollten dann besser gleich ersetzt werden.

Näheres siehe jquery.mwExtension.

Juli 2015[Quelltext bearbeiten]

Fortgesetzte API-Abfragen.

August 2015[Quelltext bearbeiten]

Seit dem 6. August 2015 ist document.write() nicht mehr verfügbar.[2]

Die seit 2011 obsoleten Funktionen mit sajax werden ab Mitte August 2015 nicht mehr verfügbar sein (phab:T55120, gerrit:228768). Ersatz durch mw.API.

April 2017[Quelltext bearbeiten]

Mit 1.29.0-wmf.21 sind die seit November 2013 wirkungslosen Elemente nicht mehr vorhanden, wie das bereits 2011 angekündigt wurde.[4] Es ist mit Syntaxfehlern zu rechnen, falls diese als Funktion gestartet werden.

Konkret sind betroffen:

  • DOM-Hilfsfunktionen usw.:
    • addClickHandler(), addHandler(), changeText(), getElementsByClassName(), getInnerText(), killEvt(), removeHandler()
    • Ersatz durch jQuery
  • Hook usw.:
  • Browser-Analyse:
    • clientPC, ff2_bugs, ie6_bugs, is_chrome, is_chrome_mac, is_ff2, is_ff2_win, is_ff2_x11, is_gecko, is_opera, is_opera_95, is_opera_preseven, is_safari, is_safari_win, opera6_bugs, opera7_bugs, opera95_bugs, webkit_match, webkit_version
    • Ersatz durch jQuery.client
  • Checkbox:
    • addCheckboxClickHandlers(), setupCheckboxShiftClick()
    • Ersatz durch jquery.checkboxShiftClick
  • Toolbar:
    • mwEditButtons[], mwCustomEditButtons[]
    • Ersatz durch mw.toolbar
  • Spinner:
    • injectSpinner(), removeSpinner()
    • Ersatz durch jquery.spinner
  • HTML escapes:
    • escapeQuotes(), escapeQuotesHTML()
    • Ersatz durch mw.html
  • Kurze Nachricht anzeigen:
  • Tastenkombination im Tooltip anzeigen:
    • tooltipAccessKeyPrefix, tooltipAccessKeyRegexp, updateTooltipAccessKeys()
    • Ersatz durch jquery.accessKeyLabel
  • Verschiedene Hilfsfunktionen:

November 2018[Quelltext bearbeiten]

Nach Ankündigung im April 2017[5] fiel die Toolbar (Modell „2006“) nunmehr weg; zwei jüngere (2010 und 2017) übernahmen diese Funktion.

Die wikibits waren eine JavaScript-Bibliothek der frühen Jahre gewesen, die bis Frühjahr 2016 standardmäßig in den Aufbau jeder Wiki-Seite eingebunden wurde; zurzeit noch auf den Wikis der WMF bereitgestellt wird. Sie existiert weiterhin und kann bei Bedarf noch angefordert werden. Da die Bibliothek nicht mehr gepflegt wird, nur noch an relativ wenigen Stellen verwendet wird und nur noch wenig wirksame Funktionen enthält, soll sie 2016/2017 auch auf dem Server gelöscht werden.

Zu Ende April 2017 mit Version 1.29.0-wmf.21 ist nunmehr die Bereinigung der seit Jahren wirkungslosen Elemente angekündigt worden. Siehe Breaking Change April 2017.

Die Gruppe um #importScript() sowie #addOnloadHook() sind zurzeit nicht betroffen.

Um 2005 hatte man ein wikibits.js bereitgstellt, das ausnahmslos und zu Beginn des Seitenaufbaus in jede im Browser dargestellte Seite geladen wurde. Sie hatte schließlich rund 40 Funktionen und über zwei Dutzend Variablen umfasst. Hinzu kamen mehrere ähnliche Skripte dieser Art.

Um 2010 ergab sich, dass diese Methodik nicht mehr aufrecht gehalten werden konnte:

  • Sämtliche Skripte mussten alle nacheinander in einer festgelegten Reihenfolge ausgeführt werden; moderne Browser sind hingegen dafür ausgelegt, dass sie viele Arbeiten parallel ausführen können; ggf. sogar in mehreren Hardware-Prozessoren gleichzeitig. Auf jeden Fall wird die Wartezeit genutzt, in der eine Funktion auf etwas warten muss (auf Daten von der Festplatte oder gar aus dem Internet, auf die Beendigung eines anderen Skripts), indem der Rechner nicht untätig bleibt, sondern bereits eine andere Aufgabe ausführt, zu der bereits alle Voraussetzungen gegeben sind. Nach der alten Methodik, bei der immer ein Skript warten musste, bis alle seine Vorgänger fertig abgearbeitet wären, summierten sich die Wartezeiten und der Seitenaufbau verzögerte sich ins Unzumutbare, erlaubte zumindest keine neuen Skripte mehr.
  • Die Funktionen waren alle auf der globalen Ebene definiert und unterschieden sich nicht von sonstigen Ursprüngen. Zwischen Hunderten Funktionen war schließlich keine Linie mehr erkennbar; hinzu kamen Optionsvariablen. Namenskonflikte sind unvermeidlich; es wurde zunehmend unklar, was zu tun ist, um diese Funktion bereitzustellen. Benutzerskripte, Gadgets verschiedenster Herkunft, persönliche Definitionen schwammen unterschiedslos neben den diversen MediaWiki-Bibliotheken her.

2011 wurde mit MW 1.17 der ResourceLoader eingeführt; gleichzeitig das mw-Objekt. Damit werden

  • nicht mehr alle Skripte in jede Seite geladen, sondern nur diejenigen, die für diesen individuellen Kontext tatsächlich benötigt werden;
  • keine Skripte doppelt geladen, weil verschiedene Benutzerskripte dieselbe Bibliothek anfordern;
  • Skripte und Funktionen baldmöglichst ausgeführt, bei denen alle Voraussetzungen dafür schon gegeben sind;
  • die Ausführung von Funktionen zurückgestellt, wenn noch auf etwas gewartet werden muss;
  • Skripte für bestimmte Seiten und Benutzerkonfigurationen in großen Paketen zum Herunterladen bereitgestellt, wobei viele Module gebündelt sind – was effizienter ist als lauter kleine Einzelabfragen;
  • unterschiedliche Quellcode-Versionen auch sofort mit unterschiedlichen URL versehen, so dass publizierte Änderungen der Skripte ab dem nächsten Seitenaufruf auch wirksam werden, ohne dass ein Browser-Cache veraltete Versionen ausliefert;
  • die Quellcodes komprimiert (Kommentare und Leerzeichen entfernt), so dass sie effizienter über das Internet transportiert und im Browser ausgeführt werden können;
  • Funktionen und Optionsvariablen in strukturierten Objekten angeordnet, wodurch sich ihre Zugehörigkeit auf einen Blick nachvollziehen lässt.

Es wurde eine Übergangszeit von fünf Jahren vorgesehen.

Zum April 2016 wurde festgestellt,[6] dass die rund 850 Wiki-Projekte der WMF und die darin angebotenen Gadgets im Lauf der Jahre die wikibits-Aufrufe weitgehend ersetzt hatten.

  • Ein weiteres standardmäßiges Laden, ohne dass die 40 Funktionen noch benötigt würden, belastet nunmehr nur jeden Leser eines enzyklopädischen Artikels und jeder Wiki-Seite in jedem Wiki-Projekt, weil für ihn alle Definitionen bereitgestellt werden müssen und vor dem Weiterarbeiten auf die Initialisierung gewartet werden muss, ohne dass nicht angemeldete Benutzer eine einzige dieser Funktionen aufrufen würden. Ab und an muss die ungenutzte Bibliothek auch über das Internet in den Browser übertragen werden.
  • Lediglich bei einigen Dutzend persönlicher Benutzerskripte im Wiki, die in den letzten Jahren nicht gepflegt wurden, wird für diese noch aktiven Benutzer eine Anpassung benötigt, sofern danach diese Aufrufe veralteter Software überhaupt noch funktionsfähig sind.

Die Bibliothek kann noch für einige Zeit benutzt werden; es muss dazu das Modul mediawiki.legacy.wikibits explizit angefordert werden. Gleichwohl sollten nunmehr die restlichen Umstellungen erfolgen.

Der Traditionsname bits lebt weiter in der Domain bits.wikimedia.org – sie stellt für die Wiki-Seiten im Browser die Module mit den Ressourcen bereit, auch wenn zurzeit ein anderes URL-Format (des aktuellen Wiki) bevorzugt wird.

Protokoll (http:)[Quelltext bearbeiten]

  • Einbindungen von Ressourcen mit explizitem http oder protokoll-relative URL sollten auf https:// umgestellt werden. Die früheren Differenzierungen haben nach der einheitlichen Wiki-Nutzung per HTTPS keinen Sinn mehr. Protokoll-relative URL werden auf einer Wiki-Seite in der WMF zu HTTPS, ein http:// zu einer WMF-Domain wird von moderneren Browsern in HTTPS umgeschrieben; in älteren Browsern kommt es zu einer doppelten Anfrage bzw. Aufforderung zum Abruf der korrigierten URL.
  • In der API werden aus Sicherheitsgründen ab Sommer 2016 für bestimmte Aktivitäten nur noch https-Aufträge akzeptiert.

secure.wikimedia.org[Quelltext bearbeiten]

  • Die Domain secure.wikimedia.org ist seit Herbst 2011 nicht mehr aktuell und sollte auf einfachere https-Konstrukte reduziert werden. Inzwischen werden auch Seiten immer in der einheitlichen URL dargestellt; also lediglich https statt http in der URL jeder Seite.

URL-Parameter[Quelltext bearbeiten]

dontcountme=s[Quelltext bearbeiten]

Der Parameter dontcountme=s schloss so endende URLs aus Webalizer-Statistiken aus (siehe englischsprachige Wikipedia). Seit Webalizer nicht mehr eingesetzt wird, ist der Parameter bedeutungslos und sollte entfernt werden.

smaxage=[Quelltext bearbeiten]

Der URL-Parameter smaxage=Sekunden kommt oft in den URL von CSS/JS-Ressourcen vor.

  • Mit der 2013 begonnenen durchgängigen Verwendung von HTTPS wurde dieser Parameter obsolet.
  • Ursprünglich generierte er eine Antwort des Servers, mit der sich die Speicherung der Ressource gleicher URL auf Zwischenknoten im Internet zwecks Direktantwort steuern lässt.
  • Nur unter http: ist aber für die Zwischenknoten die URL sichtbar.
  • Obendrein beginnt der Parameter Ende 2013, die Wiki-Server von der Auslieferung aktualisierter Seitenversionen abzuhalten.

Der Parameter sollte nach und nach aus den URL entfernt werden.

Anfang Oktober 2015 wird auch berichtet, dass er dazu führen kann, dass der Server mit HTTP-Statuscode 403 die Antwort verweigert; insbesondere wenn mit bcache=1 kombiniert wird.

rawcontinue[Quelltext bearbeiten]

Seit 2013 wurde auf mw:API:Query #Continuing queries eine veränderte Struktur der Fortsetzung von abschnittsweisen Antworten angeboten; seit Juli 2015 ist eine explizite Spezifikation erforderlich, wenn mit der query action gearbeitet wird.

Frühere Situation:

  • In der Antwort war bei Vorhandensein weiterer Antwort-Segmente ein Objekt query-continue vorhanden.
  • Dieses enthielt ein Objekt gleichen Namens wie das allgemeine Ergebnis.
  • Innerhalb dessen war die Information zur Fortsetzung enthalten.
  • Das Verpacken der Fortsetzungsinformation in ein gesondertes Objekt ist eigentlich völlig überflüssig, und das Auslesen der Fortsetzungsinformation unnötig kompliziert und anfällig für interne Änderungen.

Änderung ab 2014:

  • Die Antwort enthält bei Vorliegen von Fortsetzungsantworten ein Objekt continue.
  • Dieses kann – ohne dessen innere Struktur kennen zu müssen – direkt für den Abruf von Fortsetzungen übergeben werden.
  • Bis auf Weiteres muss bereits beim ersten Abruf explizit angegeben werden, ob nach der alten oder der neuen Methode geantwortet werden soll.
    • Langfristig soll continue zum Default werden.
    • Momentan löst das Fehlen einer expliziten Angabe Warnmeldungen in der Fehlerkonsole aus, ab Anfang Juli 2015 wird bereits continue unterstellt.

Behelfsmäßige Weiterverwendung:

  • Wenn mit Fortsetzungen gerechnet wird und diese bereits verarbeitet wurden, ist anzugeben:
    1. In jeder URL einzufügen: &rawcontinue= oder &rawcontinue=1
    2. In einem Anfrage-Objekt: rawcontinue:true
  • Damit kann die sonstige Programmierung einstweilen belassen werden.
  • Im Zuge größerer Überarbeitungen sollte aber die Auswertung von Fortsetzungen ersetzt und vereinfacht werden.

Umstellung:

  • Wenn gar keine Fortsetzungen auftreten können (etwa weil nur eine Seitenversion abgefragt wird) oder die neue Struktur benutzt wird:
    1. In der URL einzufügen: &continue=
    2. Im ersten Anfrage-Objekt: "continue": "", oder auch myQuery["continue"] = "";
      • Nur der leere string wird momentan erkannt.
      • Langfristig soll hier keine Angabe mehr erforderlich sein.
  • Wenn eine Fortsetzungsantwort vorliegt, ist das somit vorhandene Objekt continue wieder in die Folgeabfrage aufzunehmen:
    • $.extend( myQuery, answer[ "continue" ] );

Hinweis:

  • Das Schlüsselwort continue ist in Programmiersprachen ein Syntaxelement; so in JavaScript nach ECMA3. Zumindest ältere Browser könnten ein Skript nicht ausführen, wenn das Wort wie ein normaler Komponentenbezeichner auftritt; deshalb ist es oben als ["continue"] notiert.

CSRF-Tokens[Quelltext bearbeiten]

Seit 2016 wurde bei Action-Tokens eine Warnung ausgegeben, falls mit den seit 2014 veralteten Einzeltokens gearbeitet wird: edit, move, options, email sowie für Admins delete, protect, block, unblock, import. Inzwischen ist stattdessen einheitlich csrf (Cross-Site-Request-Forgery) zu benutzen. Im Herbst 2019 entfiel die Unterstützung der Einzeltokens zunächst, Anfang Oktober 2021 endgültig.[7]

on/err[Quelltext bearbeiten]

Die früher üblich gewesenen on- und err-Funktionen sind weggefallen und durch jQuery-Promise ersetzt worden.

https[Quelltext bearbeiten]

Seit Juni 2016 werden POST-Aufträge nur noch mit https unterstützt. Dies war dann für ein Jahr angekündigt gewesen und führte seitdem zu Warnungen. Für einen Monat wurden noch HTTP-Statusmeldungen bei zufällig ausgewählten 10 % der Anfragen zurückgegeben, danach unsichere Aufträge zu 100 % abgewiesen.[8]

Untermodule mediawiki.api.***[Quelltext bearbeiten]

Seit Juni 2018 sind alle kleinen Einzelfunktionen des core in das ResourceLoader-Modul mediawiki.api integriert. Die separaten Untermodule sollten eliminiert und nur noch das reguläre Modul abgefordert werden.

Anfang 2019 waren alle core-Untermodule offenbar auch aus Benutzerskripten eliminiert worden und werden aus dem MW-Core eliminiert.

MwEmbed ist seit 2011 obsolet.

Im Zusammenhang mit dem Embedded Media Player tauchten Ende 2012 im Globalen Namensraum und als unstrukturierte unmittelbare Komponenten von mw allerlei Variablen und „Shortcuts“ erneut in den Wiki-Projekten auf.

Von ihrer Benutzung ist im Zusammenhang mit diesem Projekt dringend abzuraten, sie sind teilweise auch im dortigen Kontext „deprecated“ und kürzen nur ohnehin verfügbare Standard-Funktionen ab. Ihre dauerhafte Unterstützung ist zweifelhaft, die Verfügbarkeit hängt vom dynamischen Laden des MediaPlayers ab. Die Eliminierung wird angestrebt.

  • Die Definition ist nachzulesen unter mw:MwEmbed.
  • Namentlich geht es um: mw.absoluteUrl() mw.addClassFilePaths() mw.addClassStyleSheets() mw.addDialog() mw.addLoaderDialog() mw.addModuleLoader() mw.closeLoaderDialog() mw.getConfig() mw.getEmbedPlayerPath() mw.getHexColor() mw.getJSON() mw.getLocalApiUrl() mw.getMsg() mw.getMwEmbedPath() mw.getRemoteMsg() mw.getScript() mw.getStyleSheet() mw.getToken() mw.getUserName() mw.inherit() mw.isEmpty() mw.isset() mw.isUrl() mw.load() mw.mergeConfig() mw.parseUri() mw.parseWikiText() mw.parseXML() mw.ready() mw.replaceUrlParams() mw.sendBeaconUrl() mw.setConfig() mw.setDefaultConfig() mw.versionIsAtLeast() mw.waitForObject()

Weitere Informationen[Quelltext bearbeiten]

  1. phab:T36542
  2. a b phab:T107399, gerrit:227627
    Krinkle: Use of “document.write” no longer supported. wikitech-l, 5. August 2015
  3. Krinkle: First round of loggable javascript deprecations. 30. Oktober 2013
  4. wikitech-ambassadors/2017-April/001574
  5. Rundschreiben
  6. phab:T35836
    Krinkle: Legacy wikibits will no longer loaded by default on Wikimedia wikis and MediaWiki 1.27. wikitech-l, 25. März 2016
  7. mw:MediaWiki 1.37/Deprecation of legacy API token parameters
  8. Insecure (non-HTTPS) API Requests to become unsupported starting 2016-06-12