您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Logs fetch, xhr, ws requests in console
当前为
// ==UserScript== // @name Site Measurements // @namespace http://tampermonkey.net/ // @version 2024-08-05.3 // @license MIT // @description Logs fetch, xhr, ws requests in console // @author Grosmar // @match https://*.livejasmin.com/* // @icon https://www.google.com/s2/favicons?sz=64&domain=livejasmin.com // @grant none // @run-at document-start // ==/UserScript== (function() { 'use strict'; console.log("MEASUREMENT"); const filteredWs = /jaws\./; const binaryWsPackageCountLimit = 3; //show only this amount of binary packages const wsEventFilter = { r: /onRandomAccessPoint|onMetaData/, limit: 2} // messages with this content will be shown only `limit` amount of time const OriglImage = window.Image; window.Image = function(...args) { const img = new OriginalImage(...args); img.addEventListener('load', function() {console.log('NETWORK_Img2', img.src);}); return img; }; function handleNewImages(images) { images.forEach(img => { console.log('NETWORK_Img', img.src); }); } // Create a MutationObserver to watch for added nodes const observer = new MutationObserver(mutations => { mutations.forEach(mutation => { if (mutation.addedNodes.length > 0) { mutation.addedNodes.forEach(node => { if (node.tagName === 'IMG') { handleNewImages([node]); } else if (node.querySelectorAll) { // Check for images within added containers const imgs = node.querySelectorAll('img'); if (imgs.length > 0) { handleNewImages(imgs); } } }); } }); }); // Start observing the document body for changes observer.observe(document.body, { childList: true, subtree: true }); const origFetch = fetch; window.fetch = (...args) => { console.warn("NETWORK_Fetch", ...args); return origFetch(...args); } const origOpen = XMLHttpRequest.prototype.open; XMLHttpRequest.prototype.open = function (...args) { console.warn("NETWORK_Xhr", ...args); return origOpen.apply(this, args); } const origWsSend = WebSocket.prototype.send; WebSocket.prototype.send = function(...args) { if (args[0] != 3 && !filteredWs.test(this.url)) console.warn("NETWORK_Ws_Send", ...args); return origWsSend.apply(this, args); } const OrigWs = window.WebSocket; window.WebSocket = function (url, protocols) { let ws = new OrigWs(url, protocols); if (!filteredWs.test(url)) { let binaryCount = 0; let filteredMsgCount = 0; console.warn("NETWORK_Ws_Conn", url, protocols); ws.addEventListener("message", (event) => { const isBinary = event.data instanceof ArrayBuffer; const eventFilterTest = wsEventFilter.r.test(event.data); if (event.data != 2 && ((isBinary && binaryCount++ < binaryWsPackageCountLimit) || (!isBinary && (!eventFilterTest || filteredMsgCount++ < wsEventFilter.limit)))) { console.warn("NETWORK_Ws_Msg", url, event.data); } } ); } return ws; } })();