您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Simple library to log to the storage, granting the possibility of viewing the log after the URL changes
当前为
此脚本不应直接安装。它是供其他脚本使用的外部库,要使用该库请加入元指令 // @require https://update.cn-greasyfork.org/scripts/461057/1156386/LateLog%20-%20Simple%20storage-based%20Log%20Library.js
- // ==UserScript==
- // @name LateLog - Simple storage-based Log Library
- // @namespace satology.latelog
- // @version 0.2
- // @description Simple library to log to the storage, granting the possibility of viewing the log after the URL changes
- // @author satology
- // @grant GM_getValue
- // @grant GM_setValue
- // @grant GM_registerMenuCommand
- // ==/UserScript==
- var LateLog = (function() {
- 'use strict';
- const latelog_getDateTimeString = (date = new Date()) => `${('' + date.getUTCFullYear()).slice(-2)}-${('0' + date.getUTCMonth()).slice(-2)}-${('0' + date.getUTCDate()).slice(-2)} ${('0' + date.getUTCHours()).slice(-2)}:${('0' + date.getUTCMinutes()).slice(-2)}:${('0' + date.getUTCSeconds()).slice(-2)}`;
- class Storage {
- constructor(prefix = '', config = {}) {
- this.prefix = prefix;
- this.config = config;
- }
- write(key, value, parseIt = false) {
- GM_setValue(this.prefix + key, parseIt ? JSON.stringify(value) : value);
- }
- read(key, parseIt = false) {
- let value = GM_getValue(this.prefix + key);
- if(value && parseIt) {
- value = JSON.parse(value);
- }
- return value;
- }
- }
- class LateLog {
- constructor(options = {}) {
- if(!this._isValidSetup(options)) return;
- this.storage = new Storage();
- this.options = {
- level: 5,
- maxLines: 200,
- addTimestamp: true,
- printWhileLogging: false,
- // showDisplayButton: true,
- ...options
- };
- this._init();
- }
- _isValidSetup(options) {
- if(! (typeof GM_getValue === "function" &&
- typeof GM_setValue === "function" &&
- typeof GM_registerMenuCommand === "function") ) {
- console.warn(
- `LateLog cannot be initialized - At least one off the following @grant is missing in your script:
- @grant GM_getValue
- @grant GM_setValue
- @grant GM_registerMenuCommand`);
- return false;
- }
- // TODO: validate options
- return true;
- }
- _init() {
- let that = this;
- GM_registerMenuCommand('View log', function(evt) {
- console.log('Printing LateLog');
- that.display();
- });
- return true;
- }
- _write(msg, msgLevel = 1) {
- if (this.options.level < msgLevel) {
- return;
- }
- let log = this.storage.read('log', true);
- log = log ? log : [];
- if (msg === null) {
- msg = 'null';
- }
- if (msg === undefined) {
- msg = 'undefined';
- }
- let savable = {
- lvl: msgLevel
- };
- if (this.options.addTimestamp) {
- savable.ts = `${latelog_getDateTimeString()}`;
- }
- if (msg instanceof Error) {
- savable.msg = msg.toString();
- } else if (typeof(msg) == 'object') {
- savable.msg = JSON.stringify(msg);
- savable.parse = true;
- } else {
- savable.msg = msg;
- }
- log.push(savable);
- if(log.length > this.options.maxLines) {
- log.splice(0, log.length - this.options.maxLines);
- }
- this.storage.write('log', log, true);
- this._formatPrint(savable);
- }
- _getPrintFn(level) {
- switch(level) {
- case 1:
- return console.log;
- case 2:
- return console.info;
- case 3:
- return console.debug;
- case 4:
- return console.warn;
- case 5:
- return console.error;
- default:
- return console.log;
- }
- }
- _formatPrint(x) {
- if (x.parse) {
- try {
- x.msg = JSON.parse(x.msg);
- } catch (err) {}
- if (this.options.addTimestamp) {
- this._getPrintFn(x.lvl)(`${x.ts}:`);
- }
- this._getPrintFn(x.lvl)(x.msg);
- } else {
- this._getPrintFn(x.lvl)(`${this.options.addTimestamp ? x.ts + ' ' : ''} ${x.msg}`);
- }
- }
- clear() { this.storage.write('log', [], true); }
- display() {
- let log = this.storage.read('log', true);
- if(!log) {
- console.log('LateLog - Nothing to show')
- return;
- }
- log.forEach(x => {
- this._formatPrint(x);
- });
- }
- log(msg) { this._write(msg, 1); }
- info(msg) { this._write(msg, 2); }
- debug(msg) { this._write(msg, 3); }
- warn(msg) { this._write(msg, 4); }
- error(msg) { this._write(msg, 5); }
- }
- return LateLog;
- })();