Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // ==UserScript==
- // @name Remember page scroll position
- // @namespace https://greasyfork.org/en/users/85671-jcunews
- // @version 1.0.1
- // @license AGPL v3
- // @author jcunews
- // @description Context: https://www.reddit.com/r/userscripts/comments/1ayfnoh/add_scroll_position_to_url_is_this_possible/
- // @match *://*/*
- // @include *:*
- // @grant GM_getValue
- // @grant GM_setValue
- // ==/UserScript==
- //Note: Scroll position applies to page only. Not elements within page. i.e. doesn't apply to scroll position of element content. Only the page.
- (() => {
- //=== CONFIG BEGIN
- var delayBeforeApplyPagePosition = 500; //in milliseconds. 1 second = 1000ms. since last change to page height and position.
- var delayBeforeSavePagePosition = 500; //in milliseconds. 1 second = 1000ms. since last change to page position.
- var maxDaysToKeepSavedPositions = 30; //since last update to saved page position.
- //=== CONFIG END
- var pageHeight, posX, posY, timestamp, timer;
- function savePos(recs, rec) {
- recs = GM_getValue("records", {});
- rec = recs[location.href] = recs[location.href] || {};
- rec.x = scrollX;
- rec.y = scrollY;
- rec.ts = Date.now();
- Object.keys(recs).forEach(k => {
- if ((Date.now() - recs[k].ts) >= maxDaysToKeepSavedPositions*24*60*60*1000) delete recs[k]
- });
- GM_setValue("records", recs)
- }
- pageHeight = document.body.scrollHeight;
- posX = scrollX;
- posY = scrollY;
- timestamp = Date.now();
- (function checkPage(rec) {
- if ((document.body.scrollHeight !== pageHeight) || (document.body.scrollLeft !== scrollX) || (document.body.scrollTop !== scrollY)) {
- pageHeight = document.body.scrollHeight;
- posX = scrollX;
- posY = scrollY;
- timestamp = Date.now()
- } else if ((Date.now() - timestamp) >= delayBeforeApplyPagePosition) {
- addEventListener("beforeunload", savePos);
- addEventListener("blur", savePos);
- addEventListener("focus", savePos);
- addEventListener("scroll", () => {
- clearTimeout(timer);
- timer = setTimeout(savePos, delayBeforeSavePagePosition)
- });
- if (rec = GM_getValue("records", {})[location.href]) scrollTo(rec.x, rec.y);
- return
- }
- setTimeout(checkPage, 100)
- })()
- })()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement