您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Stop fixed/sticky elements leeching my valuable screen real estate!
- // ==UserScript==
- // @name Unfix
- // @description Stop fixed/sticky elements leeching my valuable screen real estate!
- // @author Remph
- // @license GPL-3.0-or-later
- // @version 0.2.5
- // @include *
- // @namespace https://git.sr.ht/~remph/unfix.js
- // @homepageURL https://git.sr.ht/~remph/unfix.js
- // @supportURL https://git.sr.ht/~remph/unfix.js
- // @grant none
- // @compatible firefox
- // ==/UserScript==
- 'use strict';
- function unfix_element(e) {
- var newpos;
- switch (getComputedStyle(e).position) {
- case 'fixed':
- newpos = 'absolute';
- break;
- case 'sticky':
- newpos = 'relative';
- }
- if (newpos) {
- // console.debug('setting ' + e.tagName + ' to ' + newpos);
- e.style.setProperty('position', newpos, 'important');
- /* I would rather not have abused !important ^ here, to let
- pages specify when the position really *is* important
- and shouldn't be elided, but no-one can be responsible
- with it so I will take it away */
- }
- }
- function unfix_tree(root) {
- if (root.nodeType !== Node.ELEMENT_NODE)
- return;
- unfix_element(root);
- // NodeFilter.SHOW_ATTRIBUTE ?
- var t = document.createTreeWalker(root, NodeFilter.SHOW_ELEMENT);
- while (t.nextNode())
- unfix_element(t.currentNode);
- }
- (function () {
- // wait for window to finish loading to prevent races on style
- window.addEventListener('load', () => unfix_tree(document.body));
- // Catch sneaky attempts to re-fix an element from js
- new MutationObserver((muts) => muts.forEach(function (mut) {
- /* Are these sure to be mutually exclusive? Can an
- attributes change also have addedNodes? */
- switch (mut.type) {
- case 'attributes':
- unfix_element(mut.target); // if (mut.attributeName == 'style') ?
- break;
- case 'childList':
- mut.addedNodes.forEach(unfix_tree);
- }
- })).observe(document.body, {
- subtree: true, childList: true, attributes: true
- });
- })();