Edit - most sincere appologees to Chrome users. The updated version should work for non-FF folk. Did not realise scrollTopMax was a FF-specific property! Thanks Keith for reminding me that I'm an idiot and should test things.... Here's a grease/tamper/fireMonkey script to re enable the behaviour, if anyone is bothered enough. You can edit the value of maxScrollSnap on line 8 - this is the max scroll distance, in pixels, for the snapping to kick in. Basically, if you've scrolled more than 500px back up the chatbar, it won't autosnap (you don't want it autoscrolling when you've backtracked 5 pages to read something previous). You can just paste this into the console and run it if you like, but it won't last past a session, any kind of refresh/reload will remove it. The various Monkey extensions all auto load this so you don't have to think about it. // ==UserScript== // @name autoScrollSnap // @match <a href="https://app.roll20.net/editor/*" rel="nofollow">https://app.roll20.net/editor/*</a> // @version 0.1.0 // ==/UserScript== (() => { const config = { maxScrollSnap: 500, }; const getScrollDelta = ({ scrollTop, scrollTopMax, scrollHeight, clientHeight }) => { return (isNaN(scrollTopMax)) ? scrollHeight - scrollTop - clientHeight : scrollTopMax - scrollTop; }; const chatNode = document.querySelector('#textchat'), contentNode = chatNode.querySelector('.content'); const observeChat = new MutationObserver((targets) => { targets.forEach(target => { if (target.addedNodes?.length) { const messageHeight = target.addedNodes[0].offsetHeight, scrollDelta = getScrollDelta(chatNode); // console.warn(scrollDelta); if (messageHeight + config.maxScrollSnap > scrollDelta) { chatNode.scrollTop = chatNode.scrollTopMax ?? chatNode.scrollHeight - chatNode.clientHeight; } } }); }); const observerConfig = {attributes: false, childList: true, subtree: false}; if (chatNode && contentNode) observeChat.observe(contentNode, observerConfig); else console.error(`Autoscroller could not find chatbar elements.`); })();