Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
Medium: remove location hash
// ==UserScript==
// @name Medium: remove location hash
// @namespace http://efcl.info/
// @description Remove location hash from medium
// @include https://medium.com/*
// @include https://uxdesign.cc/*
// @version 1
// @grant none
// ==/UserScript==
// TamperMonkey does not work well with hash '#' in @include urls:
// https://forum.tampermonkey.net/viewtopic.php?p=3094#p3094
function removeLocationHash(event) {
var components = window.location.href.split('#');
if (components.length > 1) {
var base = components[0];
var hash = components.slice(1).join('#');
if (hash) {
console.log('medium: remove hash' + (event && event.type ? ' on ' + event.type : '') + ' #' + hash, arguments);
window.history.replaceState('', document.title, base);
}
return hash;
}
}
function removeLocationHashAndStop(event) {
event.preventDefault();
removeLocationHash(event);
}
function removeLocationHashAndScheduleNext(event) {
event.scheduleMs = removeLocationHash(event) ? event.scheduleMinMs || 500 : Math.min((event.scheduleMs || event.scheduleMinMs || 500) * 2, event.scheduleMaxMs || 60000);
event.type = 'schedule';
console.log('medium: remove hash: schedule after ' + event.scheduleMs + 'ms');
setTimeout(function() { removeLocationHashAndScheduleNext(event); }, event.scheduleMs);
}
function registerRemoveLocationHash() {
console.log('medium: remove hash: register');
window.addEventListener('popstate', removeLocationHash);
window.addEventListener('hashchange', removeLocationHashAndStop);
window.addEventListener('load', removeLocationHash);
removeLocationHashAndScheduleNext({type: 'userscript load'});
}
registerRemoveLocationHash();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.