Hallo Rolf,
Was mir nicht klar ist: Auf der Savegame Seite hast Du eine Subnavigation, bei der Beute. Möchtest Du deren Seiten dauerhaft komplett laden, oder soll das auf AJAX umgestellt werden? In dem Fall wird die Hash-Behandlung etwas schwieriger. Nicht viel, aber doch. Ich gehe erstmal davon aus, dass Du das nicht machst.
nein, das soll nicht auf AJAX umgestellt werden.
Das sollte die Zeilen 65-114 deines main.js abdecken. Durch die Navigation mittels hashchange entfällt die Reaktion auf eine click der Links.
Einige Syntax-Fehler waren scheinbar drin, habe sie hoffentlich alle korrigiert, ansonsten läuft dein Code jetzt so:
let currentHash = '';
// loadCurrentPage als hashchange-Handler registrieren
window.addEventListener("hashchange", loadCurrentPage);
// und gleich beim Start der Seite aufrufen um die Default-Page zu laden
loadCurrentPage();
function loadCurrentPage() {
let newHash = window.location.hash;
let $newTab;
if (newHash.length == 0) {
$newTab = $("#tabs .tab:first-child");
newHash = $newTab.attr("href");
}
else {
$newTab = $("#tabs .tab[href="+newHash+"]");
if ($newTab.length == 0) {
// Fehler, den Tab gibt's nicht
}
}
if (newHash != currentHash) {
currentHash = newHash;
$newTab.addClass("current").siblings().removeClass("current");
let tabName = newHash.substr(1); // das # steht in newHash drin
$("main").attr("id", tabName);
$.ajax(tabName).then(function(html) { $("#append").html(html); });
}
}
Es funktioniert, dass die erste Unterseite (game) jetzt direkt angezeigt wird. Was jedoch nicht funktioniert, ist das Umschalten auf einen neuen Tab. Es erscheint die Fehlermeldung: Uncaught Error: Syntax error, unrecognized expression: #tabs .tab[href=#releases]
In der URL-Leiste steht z.B.: http://localhost/games/demons-souls/#releases
Ich schätze mal, htaccess schießt hier irgendwie quer? Der eigentliche Pfad lautet nämlich: http://localhost/pages/games/demons-souls/index.php#releases
Ich habe htaccess so eingestellt:
Options +MultiViews
RewriteEngine On
# Rewrite "/games/<anything>" to "/pages/games/<anything>"
RewriteCond %{REQUEST_URI} !^/pages/games
RewriteRule ^games($|/.*) pages/$0 [L]
# Remove .php extension from URL
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^([^\.]+)/$ $1.php
Was fehlt, ist die Behandlung des Fehlers, wenn der genannte Hash nicht existiert. Das kann passieren, wenn der User den Hash editiert oder Du Dich vertippst hast.
Ja, so was wollte ich auch noch einbauen, danke!
Man könnte auch ganz auf jQuery verzichten, aber da Du ein Freund davon bist, habe ich es dringelassen.
Was meinst du damit? Lieber nur Standard-Javascript verwenden?
Boris