您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Rlog 展示的顺序不对,用上传的time 重排,要求上传的内容是JSON, 并且有 time 字段,time 可以被 new Date(time) 处理,就会重新覆盖默认的时间
// ==UserScript== // @name Rlog按time重排 // @namespace aizigao // @version 1.6 // @description Rlog 展示的顺序不对,用上传的time 重排,要求上传的内容是JSON, 并且有 time 字段,time 可以被 new Date(time) 处理,就会重新覆盖默认的时间 // @author aizigao // @match https://log-search-docker.zuoyebang.cc/explore* // @grant none // @license MIT // ==/UserScript== ;(function () { 'use strict' const originalFetch = window.fetch const log = (...args) => console.log('😜', ...args) function get(obj, path, defaultValue = undefined) { const keys = Array.isArray(path) ? path : path.split('.') let result = obj for (const key of keys) { result = result ? result[key] : undefined if (result === undefined) { return defaultValue } } return result } function set(obj, path, value) { const keys = Array.isArray(path) ? path : path.split('.') let current = obj keys.forEach((key, index) => { if (index === keys.length - 1) { current[key] = value } else { current[key] = current[key] || {} current = current[key] } }) return obj } const TARGET_APP_AUTH = ['zphybrid-log-debug', 'zphybrid-log'] const authKey = (() => { // const search = window.location.search; const deCodeQuery = decodeURIComponent(window.location.search) const m = deCodeQuery.match(/app=\\"(.*?)\\"/) return m ? m[1] : '' })() log('authKey', authKey) const SafeJsonParse = (str) => { try { return JSON.parse(str) } catch (e) { return str } } const transformTime = (list) => { log('transformTime', list) return list.map((i) => { const { values, ...others } = i const newValues = values .map(([_oldTs, objStr]) => { const obj = SafeJsonParse(objStr) const time = new Date(obj.time).getTime() if (typeof obj === 'string') { log('错误:数据不是JSON') } if (!time || Number.isNaN(time)) { log('没有time 字段') } if (!time || Number.isNaN(time) || typeof obj === 'string') { return [_oldTs, objStr] } if (TARGET_APP_AUTH.includes(authKey)) { const content = JSON.parse(obj.content) delete obj.content const {p: pageKey, q: pageSearchPartical,atcxt,att, ...others} = content return [ String(time * 1e6), JSON.stringify({ att, atcxt, ...others, ...obj, AT_RLOG_RE_TIMING___: 'Rlog time 重置OK', pageKey: '/static/pad-InkLearn/' + pageKey + '.html', pageSearchPartical, z_RLOG_RE_TIMING___old_time: new Date(_oldTs / 1e6), }), ] } return [ String(time * 1e6), JSON.stringify({ ...obj, AT_RLOG_RE_TIMING___: 'Rlog time 重置OK', z_RLOG_RE_TIMING___old_time: new Date(_oldTs / 1e6), }), ] }) .sort((a, b) => Number(a[0]) > Number(b[0])) return { values: newValues, ...others, } }) } window.fetch = async function (resource, init) { // Check if the request URL matches the target API endpoint if ( typeof resource === 'string' && resource.includes('/loki/api/v1/query_range') ) { log('Intercepted fetch request:', resource) // Call the original fetch const response = await originalFetch(resource, init) if(response.status>300){ return response } // Clone the response so we can modify it const clonedResponse = response.clone() const data = await clonedResponse.json() if(typeof data === 'string'){ return response } // Modify the response data log('Original response data:', data) const originList = get(data, ['data', 'result'], []) // Example modification: add a custom field to the response data.customField = 'Modified content' if (originList.length) { try { const rstList = transformTime(originList) log('rstList', rstList) set(data, ['data', 'result'], rstList) } catch (e) { log('修改失败', e) window.alert('RLog 修改失败') } } // Create a new response with the modified data const modifiedResponse = new Response(JSON.stringify(data), { status: response.status, statusText: response.statusText, headers: response.headers, }) log('Modified response data:', data) return modifiedResponse } // If not our target URL, just proceed with the normal fetch return originalFetch(resource, init) } })()
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址