您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Prevents Facebook from auto-refreshing the news feed
当前为
// ==UserScript== // @name Facebook Anti-Refresh // @namespace CustomScripts // @description Prevents Facebook from auto-refreshing the news feed // @author areen-c // @match *://*.facebook.com/* // @version 1.0 // @license MIT // @icon https://www.google.com/s2/favicons?sz=64&domain=facebook.com // @run-at document-start // @grant none // ==/UserScript== (function() { 'use strict'; let wasHidden = false; const originalHidden = Object.getOwnPropertyDescriptor(Document.prototype, 'hidden'); const originalVisibilityState = Object.getOwnPropertyDescriptor(Document.prototype, 'visibilityState'); Object.defineProperty(document, 'hidden', { get: function() { return false; } }); Object.defineProperty(document, 'visibilityState', { get: function() { return 'visible'; } }); const originalAddEventListener = EventTarget.prototype.addEventListener; EventTarget.prototype.addEventListener = function(type, listener, options) { if (type === 'visibilitychange') { return; } return originalAddEventListener.call(this, type, listener, options); }; const originalFetch = window.fetch; window.fetch = function(...args) { const url = args[0]; if (typeof url === 'string' && url.includes('facebook.com')) { console.log('Intercepted request:', url); if (url.includes('/api/graphql') || url.includes('/ajax/pagelet') || url.includes('/ajax/bulk-route-definitions')) { const now = Date.now(); if (window.lastInteraction && (now - window.lastInteraction) > 60000) { console.log('Blocking potential refresh request'); return Promise.resolve(new Response('{}', { status: 200, headers: { 'Content-Type': 'application/json' } })); } } } return originalFetch.apply(this, args); }; window.lastInteraction = Date.now(); ['click', 'scroll', 'keypress'].forEach(event => { document.addEventListener(event, () => { window.lastInteraction = Date.now(); }); }); const originalScrollTo = window.scrollTo; const originalScroll = window.scroll; window.scrollTo = function(x, y) { if (y === 0 && window.pageYOffset > 100) { console.log('Prevented scroll to top'); return; } return originalScrollTo.apply(this, arguments); }; window.scroll = function(x, y) { if (y === 0 && window.pageYOffset > 100) { console.log('Prevented scroll to top'); return; } return originalScroll.apply(this, arguments); }; const observer = new MutationObserver((mutations) => { for (const mutation of mutations) { if (mutation.type === 'childList' && mutation.removedNodes.length > 5) { const feed = document.querySelector('[role="feed"]'); if (feed && feed.children.length < 5) { console.log('Detected potential feed refresh, attempting to prevent'); } } } }); window.addEventListener('load', () => { const targetNode = document.querySelector('[role="main"]') || document.body; observer.observe(targetNode, { childList: true, subtree: true }); console.log('Facebook Anti-Refresh script loaded'); }); })();