Falscher Titel im History-Popup (Firefox)

Hallo,
in Firefox wird der Titel der vorherigen Seite, der beim Rechtsklick auf den Pfeil „Zurück“ angezeigt wird, durch den Titel der aktuellen Seite überschrieben.

Beispielsweise, wenn die erste angezeigte Seite lautet:
https://meta.discourse.org/
sehen Sie, wie der Rechtsklick auf den Pfeil aussieht (das ist korrekt):

Wenn Sie dann zu einem beliebigen Thema wechseln, wie zum Beispiel:

wurde der Titel der vorherigen Seite durch den Titel der aktuellen Seite überschrieben:

Dennoch ist der Link weiterhin gültig.

Hast du eine Idee zu diesem Fehler?

Es sieht tatsächlich nach einem Fehler aus, möglicherweise in der Art oder Reihenfolge, wie wir den Verlauf ersetzen, oder nach einer Eigenheit von Firefox.

Ich kann das Problem reproduzieren.

Da es sich um einen eher kleinen Fehler handelt, werde ich das Label pr-welcome hinzufügen, falls die Community mitwirken und einen Fix vorschlagen möchte.

Alles klar, danke für deine Antwort.

Ich habe festgestellt, dass dieser Fehler auch als leicht beschädigte Einträge in der Browserhistorie auftritt, was ich für ein schwerwiegenderes Problem halte. Genauer gesagt wird einer alten URL ein neuer Titel zugewiesen, wenn die Navigation von JS gehandhabt wird. Dies geschieht so ziemlich immer in Firefox, ist aber in Chrome ziemlich selten (ich habe bisher einen Fall gefunden: Wechsel von /top zu einem Thema).

@sam hat Recht, dass dies durch die Reihenfolge der Operationen verursacht wird, in der URL und Titel geändert werden. Ich wünschte, es gäbe irgendwo eine Art Leitfaden mit Best Practices, der die richtige Reihenfolge angibt: Aktualisieren Sie den Titel immer nachdem Sie die history-API verwendet haben.

Ich habe versucht, einige Debugging-Arbeiten durchzuführen (und ich möchte im Voraus sagen, dass ich ziemlich abgeneigt bin, ein mittelgroßes, npm-nahes Projekt zu erstellen). Anfangs habe ich diesen Code für eine kleine Erkundung verwendet:

Object.defineProperty(document, "title", {
  get() {
    return document.head.querySelector('title').innerText;
  },
  set(t) {
    console.debug('title', t, new Error("title!").stack)
    debugger;
    document.head.querySelector('title').innerText = t;
  },
  enumerable: true,
  configurable: true,
});
let ___push___ = window.history.pushState;
window.history.pushState = function(...args) {
  console.debug('push', args[0], new Error().stack);
  debugger;
  ___push___.apply(this, args);
};

let ___replace___ = window.history.replaceState;
window.history.replaceState = function(...args) {
  console.debug('replace', args[0], new Error().stack);
  debugger;
  ___replace___.apply(this, args);
};

Es hat sich tatsächlich gezeigt, dass es fast immer eine Titeländerung unmittelbar vor der history-API-Operation gibt. Leider war das nicht hilfreicher: Die Zuordnung dessen, was zur Laufzeit geschieht, zum Quellcode war ziemlich schwierig – die interessierenden Operationen sind ziemlich verstreut, der Aufrufstapel war irreführend, da die Ausführung bereits an die Ember-Ereignisschleife übergeben wurde, und im Allgemeinen war die Debugging-Erfahrung in Firefox ziemlich höllisch. Nachdem ich zu Chrome gewechselt war, war ich etwas erfolgreicher. Lange Rede, kurzer Sinn, soweit ich weiß, entscheidet Ember selbst, wann die URL aktualisiert wird. Auf der anderen Seite kann die Änderung des Titels von zwei Stellen aus initiiert werden: [1] und [2]

Nur letzteres wird jemals vor dem history-API-Aufruf ausgeführt. Der “gemeinsame Code-Vorfahre” von ihnen befindet sich hier:

// Run all the necessary enter/setup/exit hooks
this.setupContexts(newState, transition); // <- title change initiated here, by triggering `model.title:change` event

// Check if a redirect occurred in enter/setup
if (transition.isAborted) {
  // TODO: cleaner way? distinguish b/w targetRouteInfos?
  this.state!.routeInfos = this.currentRouteInfos!;
  return Promise.reject(logAbort(transition));
}

this._updateURL(transition, newState); // <- url change initiated here

Interessanterweise ist „router.js die Routing-Microlib, die von Ember.js verwendet wird.“

Nun möchte ich die Handhabung des Problems an jemanden übergeben, der, im Gegensatz zu mir, entfernt mit dem discourse-Code vertraut ist.

Bearbeiten: Habe vergessen zu erwähnen: document.title wird von [1] ein- oder mehrmals nach (beiden) Änderungen [2] und der Änderung der URL durch die history-API geändert.

1 „Gefällt mir“

(Als neuer Benutzer kann ich nicht mehr als 2 Links pro Beitrag einfügen :frowning: )

[1] (discourse/app/assets/javascripts/discourse/app/lib/page-tracker.js at 245e9f30a4825beb86fcbfcf718208752748e5b4 · discourse/discourse · GitHub)

[2] (discourse/app/assets/javascripts/discourse/app/controllers/topic.js at 542f77181a47df8aa0f909f69814406491d08c5e · discourse/discourse · GitHub)

1 „Gefällt mir“