Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save nutrino/b37fd4304495c600f3fdf319e682ae62 to your computer and use it in GitHub Desktop.
Save nutrino/b37fd4304495c600f3fdf319e682ae62 to your computer and use it in GitHub Desktop.
url: Medium remove location hash Greasemonkey
// ==UserScript==
// @name url: Medium remove location hash Greasemonkey
// @namespace http://efcl.info/
// @description Remove location hash from medium
// @include *#.*
// @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