46 lines
1.1 KiB
JavaScript
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;
|
|
} |