2016-08-18 1 views
0

Ich habe ein Unternehmen Wiki von MediaWiki. Ich habe Code geschrieben, um eine Funktion zum Sperren von Seiten hinzuzufügen, sodass Benutzer, die eine Seite bearbeiten, eine 15-minütige Sperre für die Seite erhalten, die sie zu einem beliebigen Zeitpunkt verlängern können, bevor sie abläuft.Zugriff auf Formular über Browser zurück Schaltfläche löst nicht aus "Formular erneut bestätigen"

Wenn der Benutzer eine Seite bearbeitet und dann auf Speichern klickt und dann auf die Zurück-Schaltfläche des Browsers klickt, um zum Bearbeitungsformular zurückzukehren, sieht alles normal aus und der Benutzer denkt, dass alles in Ordnung ist Erstellen Sie eine neue Sperre auf der Seite. Die Nachricht, die dem Benutzer sagt, hat eine Sperre auf der Seite, aber ich denke, es ist nur, weil es eine zwischengespeicherte Version der Seite ist; Die Ablaufzeit in der Nachricht ist die Ablaufzeit für die Sperre von der ersten Zeit, die sie bearbeitet, nicht mit der Zurück-Taste.

Ich habe versucht, HTML meta Tags auf der Seite innerhalb der head Tags, um den Cache ungültig/nicht Cache die Bearbeitungsseite, aber das funktioniert nicht, weil der MediaWiki PHP-Seitengenerator dies überschreibt.

Im Moment habe ich eine sehr schlampige Reparatur; Ich benutze JavaScript, um das Drücken der Browser-Vorwärts-Taste zu simulieren, z. Gehe in der Geschichte auf der Bearbeitungsseite vorwärts. Wenn ein neuerer Historieneintrag nicht existiert (zB Sie haben den eigentlichen "Bearbeiten" -Knopf anstelle des Browser-Zurück-Knopfes angeklickt), tut er einfach nichts, aber wenn er über die Zurück-Schaltfläche auf die Bearbeitungsseite zugreift, zeigt er kurz die Seite an etwa eine Sekunde lang, bis das JavaScript geladen wird und dann in der Historie weitergereicht wird (indem man sie an die Stelle zurückversetzt, wo sie waren, bevor man auf die Zurück-Schaltfläche klickt). Ja, das funktioniert, aber es ist meiner Meinung nach eine sehr schlechte Lösung, da es nicht sehr nahtlos/benutzerfreundlich ist und Benutzer verwirren oder sie denken lassen könnte, dass etwas mit ihrem Browser nicht stimmt.

Eine bessere Lösung wäre, den Benutzer zu zwingen, das Formular erneut einzureichen, wodurch eine "frische" Version der Bearbeitungsseite geöffnet wird, und ich bin mir nicht sicher, warum es das nicht schon tut. Was ich damit meine, ist, wenn der Benutzer die Bearbeitungsseite über den Zurück-Knopf des Browsers aufruft, möchte ich, dass er die Fehlerseite "Formularwiederbestätigung bestätigen" anzeigt. Google Chrome zum Beispiel:

error example

Ich denke, das Problem durch Erzwingen eines Resubmit des Formulars zu beheben, die meiner Meinung nach wird sich dann tatsächlichen Seite Blockier erstellen. Korrigiere mich, wenn ich falsch liege.

Ich denke nicht viel von der Seite Sperrcode ist sehr relevant, denn der Grund für das Problem ist nur, dass die Zurück-Schaltfläche bringt sie zu einer im Cache gespeicherten Version der Seite und nicht eine "frische" Version, aber Wenn Sie anders denken, zögern Sie nicht danach zu fragen. Lassen Sie mich wissen, welche Teile des Codes zu posten sind und ich werde sie hinzufügen.

+0

nach dem Post, verwenden Sie die Umleitung für die gleiche Seite. – devpro

+0

um. Was? Können Sie erklären, was Sie damit meinen? –

Antwort

0

Ich denke, dass @devpro Kommentar zu Ihren Fragen verwandt ist, aber seine Bedeutung sollte umgekehrt werden. Mediawiki bereits haben Mechanismus, der verhindert, dass Benutzer "Wiedervorlage" Warnung sehen, wenn er später auf "Aktualisieren" oder "Zurück" -Button klickt - nachdem Formular gesendet wurde, leitet Benutzer (über 302 Redirect) auf die Seite, die bearbeitet wurde.

Auf diese Weise, wenn Benutzer entscheiden, Seite direkt nach der Bearbeitung zu aktualisieren oder wenn er Formular gepostet, dann zu einer anderen Seite navigiert und "Zurück" -Taste gedrückt - er wird nicht erneut Formular erneut einreichen.

Es ist fast unmöglich, dieses Verhalten zu ändern (es ist tief im Mediawiki-Kern vergraben), obwohl Ereignis, wenn es möglich wäre - Sie sollten diesen Weg nicht gehen, bis Sie Ihre Editoren völlig verwirrt bekommen wollen.

Es gibt keine Lösung an Back-End-Seite, da die Formularseite von Browser-Cache geladen wird, aber man kann immer noch dies mit js und Mediawiki JS-Schnittstelle kann mit diesem verhindern:

Erweiterung erstellen, die JS fügt Skript, um 'Aktion' anzuzeigen, machen Sie es Variable wgPostEdit verfolgen (see more), die erst nach dem Speichern der Seite aufgefüllt wird. Sobald diese Variable eingestellt ist, verwenden Sie this trick, um eine Warnung anzuzeigen, wenn der Benutzer versucht, zurück zu navigieren.

1

Finden Sie einen Haken, der Ihnen die OuputPage gibt (ich bin nicht so vertraut mit ihnen, aber vielleicht OutputPageBeforeHTML?) Und rufen Sie OuputPage::enableClientCache(false) auf Bearbeitungsseiten.

Verwandte Themen