userscripts/MediaWiki Redirects Fixer.u...

46 lines
1.1 KiB
JavaScript

// ==UserScript==
// @name MediaWiki Redirects Fixer
// @namespace blankie-scripts
// @match https://*.wikipedia.org/*
// @grant none
// @version 1.0.0
// @author blankie
// @description Fixes redirects of pages with anchors on Wikipedia/MediaWiki instances when Javascript is disabled
// @inject-into content
// @run-at document-end
// ==/UserScript==
"use strict";
function scrollToHash(scrollTo) {
if (!scrollTo) {
return;
}
let element = document.querySelector(scrollTo);
if (element) {
element.scrollIntoView();
}
}
for (let script of document.querySelectorAll("script")) {
let match = /;RLCONF=({"[\s\S]+?});RLSTATE={"/.exec(script.textContent);
if (!match) {
continue;
}
let rlconf = JSON.parse(match[1]);
if (rlconf.wgInternalRedirectTargetUrl) {
let url = new URL(rlconf.wgInternalRedirectTargetUrl, location);
let scrollTo = url.hash;
if (location.hash) {
url.hash = location.hash;
scrollTo = null;
}
history.replaceState(null, "", url);
scrollToHash(scrollTo);
}
break;
}