您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Blocks specific requests to maintain anonymity while viewing Instagram stories, supporting XMLHttpRequest, Fetch API, and GraphQL.
// ==UserScript== // @name Instagram Anonymous Story Viewer // @version 1.1 // @description Blocks specific requests to maintain anonymity while viewing Instagram stories, supporting XMLHttpRequest, Fetch API, and GraphQL. // @license MIT // @author Mobile46 // @match *://*.instagram.com/* // @include *://*.instagram.com/* // @run-at document-start // @icon https://www.google.com/s2/favicons?domain=instagram.com&sz=32 // @namespace https://greasyfork.org/users/1466082 // ==/UserScript== (function () { "use strict"; const config = { debug: false, blockedPatterns: [/viewSeenAt/i, /story_view/i], }; const log = (...args) => { if (config.debug) { console.log("[Instagram Anonymous Story Viewer]", ...args); } }; const shouldBlockRequest = (data) => { if (!data) return false; try { const strData = typeof data === "string" ? data : JSON.stringify(data); return config.blockedPatterns.some((pattern) => pattern.test(strData)); } catch (e) { log("Error checking request data:", e); return false; } }; const originalXMLSend = XMLHttpRequest.prototype.send; XMLHttpRequest.prototype.send = function (...args) { try { if (shouldBlockRequest(args[0])) { log("Blocked XMLHttpRequest with viewSeenAt data"); return; } return originalXMLSend.apply(this, args); } catch (e) { log("Error in XMLHttpRequest override:", e); return originalXMLSend.apply(this, args); } }; const originalFetch = window.fetch; window.fetch = async function (...args) { try { const [resource, options = {}] = args; const body = options.body || null; if ( shouldBlockRequest(body) || (typeof resource === "string" && shouldBlockRequest(resource)) ) { log("Blocked Fetch request with viewSeenAt data"); return new Promise(() => {}); } return await originalFetch.apply(this, args); } catch (e) { log("Error in Fetch override:", e); return originalFetch.apply(this, args); } }; const protectOverrides = () => { try { Object.defineProperty(window, "fetch", { value: window.fetch, writable: false, configurable: false, }); Object.defineProperty(XMLHttpRequest.prototype, "send", { value: XMLHttpRequest.prototype.send, writable: false, configurable: false, }); } catch (e) { log("Error protecting overrides:", e); } }; try { protectOverrides(); log("Script initialized successfully"); } catch (e) { console.error( "[Instagram Anonymous Story Viewer] Initialization error:", e ); } })();