Add url params clean

This commit is contained in:
the1812 2019-12-19 21:21:46 +08:00
parent 7eeae629d8
commit 01e461ec52
13 changed files with 240 additions and 183 deletions

View File

@ -33,7 +33,7 @@ declare global {
ontimeout?: (response: MonkeyXhrResponse) => void
onload?: (response: MonkeyXhrResponse) => void
}
type RunAtOptions = "document-start" | "document-end" | "document-idle" | "document-body" | "context-menu";
type RunAtOptions = "document-start" | "document-end" | "document-idle" | "document-body" | "context-menu"
type DanmakuOption = '无' | 'XML' | 'ASS'
type DashCodec = 'AVC/H.264' | 'HEVC/H.265'
type Pattern = string
@ -65,77 +65,77 @@ declare global {
}
interface MonkeyInfo {
script: {
author: string;
copyright: string;
description: string;
excludes: string[];
homepage: string;
icon: string;
icon64: string;
includes: string[];
lastUpdated: number;
matches: string[];
downloadMode: string;
name: string;
namespace: string;
author: string
copyright: string
description: string
excludes: string[]
homepage: string
icon: string
icon64: string
includes: string[]
lastUpdated: number
matches: string[]
downloadMode: string
name: string
namespace: string
options: {
awareOfChrome: boolean;
compat_arrayleft: boolean;
compat_foreach: boolean;
compat_forvarin: boolean;
compat_metadata: boolean;
compat_prototypes: boolean;
compat_uW_gmonkey: boolean;
noframes: boolean;
awareOfChrome: boolean
compat_arrayleft: boolean
compat_foreach: boolean
compat_forvarin: boolean
compat_metadata: boolean
compat_prototypes: boolean
compat_uW_gmonkey: boolean
noframes: boolean
override: {
excludes: false;
includes: false;
orig_excludes: string[];
orig_includes: string[];
use_excludes: string[];
use_includes: string[];
};
run_at: RunAtOptions;
};
position: number;
resources: string[];
"run-at": RunAtOptions;
system: boolean;
unwrap: boolean;
version: string;
excludes: false
includes: false
orig_excludes: string[]
orig_includes: string[]
use_excludes: string[]
use_includes: string[]
}
run_at: RunAtOptions
}
position: number
resources: string[]
"run-at": RunAtOptions
system: boolean
unwrap: boolean
version: string
}
scriptMetaStr: string;
scriptSource: string;
scriptUpdateURL: string;
scriptWillUpdate: boolean;
scriptHandler: string;
isIncognito: boolean;
version: string;
scriptMetaStr: string
scriptSource: string
scriptUpdateURL: string
scriptWillUpdate: boolean
scriptHandler: string
isIncognito: boolean
version: string
}
interface CustomNavbarComponents {
blank1: number;
logo: number;
category: number;
rankingLink: number;
drawingLink: number;
musicLink: number;
gamesIframe: number;
livesIframe: number;
shopLink: number;
mangaLink: number;
blank2: number;
search: number;
userInfo: number;
messages: number;
activities: number;
bangumi: number;
watchlaterList: number;
favoritesList: number;
historyList: number;
upload: number;
blank3: number;
blank1: number
logo: number
category: number
rankingLink: number
drawingLink: number
musicLink: number
gamesIframe: number
livesIframe: number
shopLink: number
mangaLink: number
blank2: number
search: number
userInfo: number
messages: number
activities: number
bangumi: number
watchlaterList: number
favoritesList: number
historyList: number
upload: number
blank3: number
}
type CustomNavbarOrders = { [key in keyof CustomNavbarComponents]: number };
type CustomNavbarOrders = { [key in keyof CustomNavbarComponents]: number }
interface SimpleHomeCategoryOrders {
anime: number
bangumi: number
@ -158,7 +158,7 @@ declare global {
documentary: number
[key: string]: number
}
const unsafeWindow: Window;
const unsafeWindow: Window
const UserAgent: string
const EmptyImageUrl: string
interface Window {
@ -169,99 +169,99 @@ declare global {
[key: string]: any
}
class SpinQuery {
static condition<T>(query: () => T, condition: (queryResult: T) => boolean, success: (queryResult: T) => void, failed?: () => void): void;
static condition<T>(query: () => T, condition: (queryResult: T) => boolean): Promise<T>;
static select<T>(query: () => T, action: (queryResult: T) => void, failed?: () => void): void;
static select<T>(query: () => T): Promise<T>;
static select(query: string): Promise<HTMLElement | null>;
static select(query: string, action: (queryResult: HTMLElement) => void, failed?: () => void): void;
static any<T>(query: () => T, action: (queryResult: T) => void, failed?: () => void): void;
static any<T>(query: () => T): Promise<T>;
static any(query: string): Promise<JQuery>;
static any(query: string, action: (queryResult: JQuery) => void, failed?: () => void): void;
static count<T>(query: () => T, count: number, success: (queryResult: T) => void, failed?: () => void): void;
static count<T>(query: () => T, count: number): Promise<T>;
static count(query: string, count: number): Promise<NodeListOf<Element>>;
static count(query: string, count: number, success: (queryResult: NodeListOf<Element>) => void, failed?: () => void): Promise<void>;
static unsafeJquery(action: () => void, failed?: () => void): void;
static unsafeJquery(): Promise<void>;
static condition<T>(query: () => T, condition: (queryResult: T) => boolean, success: (queryResult: T) => void, failed?: () => void): void
static condition<T>(query: () => T, condition: (queryResult: T) => boolean): Promise<T>
static select<T>(query: () => T, action: (queryResult: T) => void, failed?: () => void): void
static select<T>(query: () => T): Promise<T>
static select(query: string): Promise<HTMLElement | null>
static select(query: string, action: (queryResult: HTMLElement) => void, failed?: () => void): void
static any<T>(query: () => T, action: (queryResult: T) => void, failed?: () => void): void
static any<T>(query: () => T): Promise<T>
static any(query: string): Promise<JQuery>
static any(query: string, action: (queryResult: JQuery) => void, failed?: () => void): void
static count<T>(query: () => T, count: number, success: (queryResult: T) => void, failed?: () => void): void
static count<T>(query: () => T, count: number): Promise<T>
static count(query: string, count: number): Promise<NodeListOf<Element>>
static count(query: string, count: number, success: (queryResult: NodeListOf<Element>) => void, failed?: () => void): Promise<void>
static unsafeJquery(action: () => void, failed?: () => void): void
static unsafeJquery(): Promise<void>
}
class Toast {
show(): void;
dismiss(): void;
element: HTMLElement;
key: string;
static show(message: string, title: string, duration?: number): Toast;
static info(message: string, title: string, duration?: number): Toast;
static success(message: string, title: string, duration?: number): Toast;
static error(message: string, title: string, duration?: number): Toast;
show(): void
dismiss(): void
element: HTMLElement
key: string
static show(message: string, title: string, duration?: number): Toast
static info(message: string, title: string, duration?: number): Toast
static success(message: string, title: string, duration?: number): Toast
static error(message: string, title: string, duration?: number): Toast
}
class Resource {
text: string;
key: string;
dependencies: Array<Resource>;
styles: Array<Resource>;
displayName: string;
dropdown: object;
downloaded: boolean;
constructor(url: string, styles?: Resource[]);
download(): Promise<string>;
getStyle(id: string): string;
getPriorStyle(): any;
applyStyle(id: string, important: boolean): void;
static all: object;
static displayNames: object;
static manifest: object;
static root: string;
text: string
key: string
dependencies: Array<Resource>
styles: Array<Resource>
displayName: string
dropdown: object
downloaded: boolean
constructor(url: string, styles?: Resource[])
download(): Promise<string>
getStyle(id: string): string
getPriorStyle(): any
applyStyle(id: string, important: boolean): void
static all: object
static displayNames: object
static manifest: object
static root: string
}
class ResourceManager {
import(compnentName: string): any;
getDefaultStyleId(key: string): string;
applyStyle(key: string, id?: string): void;
removeStyle(key: string): void;
applyImportantStyle(key: string, id?: string): void;
applyStyleFromText(text: string, id: string): void;
applyImportantStyleFromText(text: string, id: string): void;
getStyle(key: string, id?: string): void;
toggleStyle(content: string, id: string): void;
toggleStyle(key: string): void;
applyDropdownOptions(): Promise<void>;
import(compnentName: string): any
getDefaultStyleId(key: string): string
applyStyle(key: string, id?: string): void
removeStyle(key: string): void
applyImportantStyle(key: string, id?: string): void
applyStyleFromText(text: string, id: string): void
applyImportantStyleFromText(text: string, id: string): void
getStyle(key: string, id?: string): void
toggleStyle(content: string, id: string): void
toggleStyle(key: string): void
applyDropdownOptions(): Promise<void>
}
const resources: ResourceManager;
const resources: ResourceManager
class DoubleClickEvent {
constructor(handler: (e: MouseEvent) => void, singleClickHandler: (e: MouseEvent) => void);
bind(element: Element): void;
unbind(element: Element): void;
constructor(handler: (e: MouseEvent) => void, singleClickHandler: (e: MouseEvent) => void)
bind(element: Element): void
unbind(element: Element): void
}
class Ajax {
static send(xhr: XMLHttpRequest, body: string | Document | Blob | ArrayBufferView | ArrayBuffer | FormData | URLSearchParams | ReadableStream<Uint8Array>): Promise<string>;
static getText(url: string): Promise<string>;
static getTextWithCredentials(url: string): Promise<string>;
static getJson(url: string): Promise<any>;
static getJsonWithCredentials(url: string): Promise<any>;
static getBlob(url: string): Promise<Blob>;
static getBlobWithCredentials(url: string): Promise<Blob>;
static postText(url: string, body: string | Document | Blob | ArrayBufferView | ArrayBuffer | FormData | URLSearchParams | ReadableStream<Uint8Array>): Promise<string>;
static postTextWithCredentials(url: string, body: string | Document | Blob | ArrayBufferView | ArrayBuffer | FormData | URLSearchParams | ReadableStream<Uint8Array>): Promise<string>;
static postJson(url: string, json: any): Promise<any>;
static postJsonWithCredentials(url: string, json: any): Promise<any>;
static monkey(details: MonkeyXhrBasicDetails): Promise<any>;
static send(xhr: XMLHttpRequest, body: string | Document | Blob | ArrayBufferView | ArrayBuffer | FormData | URLSearchParams | ReadableStream<Uint8Array>): Promise<string>
static getText(url: string): Promise<string>
static getTextWithCredentials(url: string): Promise<string>
static getJson(url: string): Promise<any>
static getJsonWithCredentials(url: string): Promise<any>
static getBlob(url: string): Promise<Blob>
static getBlobWithCredentials(url: string): Promise<Blob>
static postText(url: string, body: string | Document | Blob | ArrayBufferView | ArrayBuffer | FormData | URLSearchParams | ReadableStream<Uint8Array>): Promise<string>
static postTextWithCredentials(url: string, body: string | Document | Blob | ArrayBufferView | ArrayBuffer | FormData | URLSearchParams | ReadableStream<Uint8Array>): Promise<string>
static postJson(url: string, json: any): Promise<any>
static postJsonWithCredentials(url: string, json: any): Promise<any>
static monkey(details: MonkeyXhrBasicDetails): Promise<any>
}
type Observable = string | Node | Node[] | NodeList;
type Observable = string | Node | Node[] | NodeList
class Observer {
constructor(element: Element, callback: MutationCallback);
start(): Observer;
stop(): Observer;
forEach(callback: (observer: Observer) => void): void;
add(element: Element): Observer;
options: MutationObserverInit;
static observe(observable: Observable, callback: MutationCallback, options: MutationObserverInit): Observer;
static childList(observable: Observable, callback: MutationCallback): Observer;
static childListSubtree(observable: Observable, callback: MutationCallback): Observer;
static attributes(observable: Observable, callback: MutationCallback): Observer;
static attributesSubtree(observable: Observable, callback: MutationCallback): Observer;
static all(observable: Observable, callback: MutationCallback): Observer;
static videoChange(callback: MutationCallback): Promise<void>;
constructor(element: Element, callback: MutationCallback)
start(): Observer
stop(): Observer
forEach(callback: (observer: Observer) => void): void
add(element: Element): Observer
options: MutationObserverInit
static observe(observable: Observable, callback: MutationCallback, options: MutationObserverInit): Observer
static childList(observable: Observable, callback: MutationCallback): Observer
static childListSubtree(observable: Observable, callback: MutationCallback): Observer
static attributes(observable: Observable, callback: MutationCallback): Observer
static attributesSubtree(observable: Observable, callback: MutationCallback): Observer
static all(observable: Observable, callback: MutationCallback): Observer
static videoChange(callback: MutationCallback): Promise<void>
}
interface BilibiliEvolvedSettings {
useDarkStyle: boolean,
@ -417,14 +417,15 @@ declare global {
customStyles: CustomStyle[],
simpleHomeCategoryOrders: SimpleHomeCategoryOrders,
keymapJumpSeconds: number,
urlParamsClean: boolean,
latestVersionLink: string,
currentVersion: string,
}
const GM_info: MonkeyInfo;
function GM_xmlhttpRequest(details: MonkeyXhrDetails): { abort: () => void };
function GM_setClipboard(data: any, info: string | { type?: string, mimetype?: string }): void;
function GM_setValue(name: keyof BilibiliEvolvedSettings, value: any): void;
function GM_getValue<T>(name: keyof BilibiliEvolvedSettings, defaultValue?: T): T;
const GM_info: MonkeyInfo
function GM_xmlhttpRequest(details: MonkeyXhrDetails): { abort: () => void }
function GM_setClipboard(data: any, info: string | { type?: string, mimetype?: string }): void
function GM_setValue(name: keyof BilibiliEvolvedSettings, value: any): void
function GM_getValue<T>(name: keyof BilibiliEvolvedSettings, defaultValue?: T): T
const GM: {
info: MonkeyInfo
xmlHttpRequest: typeof GM_xmlhttpRequest
@ -432,28 +433,28 @@ declare global {
setValue: (name: keyof BilibiliEvolvedSettings, value: any) => Promise<void>
getValue: <T>(name: keyof BilibiliEvolvedSettings, defaultValue?: T) => Promise<T>
}
const settings: BilibiliEvolvedSettings;
const customNavbarDefaultOrders: CustomNavbarOrders;
const aria2RpcDefaultOption: RpcOption;
const languageNameToCode: { [key: string]: string };
const languageCodeToName: { [key: string]: string };
function logError(message: Error | string): void;
const settings: BilibiliEvolvedSettings
const customNavbarDefaultOrders: CustomNavbarOrders
const aria2RpcDefaultOption: RpcOption
const languageNameToCode: { [key: string]: string }
const languageCodeToName: { [key: string]: string }
function logError(message: Error | string): void
function loadSettings(): void
function addSettingsListener(key: keyof BilibiliEvolvedSettings, handler: (newValue: any, oldValue: any) => void, initCall?: boolean): void;
function removeSettingsListener(key: keyof BilibiliEvolvedSettings, handler: (newValue: any, oldValue: any) => void): void;
function raiseEvent(element: Element, eventName: string): void;
function loadLazyPanel(selector: string): Promise<void>;
function loadDanmakuSettingsPanel(): Promise<void>;
function contentLoaded(callback: () => void): void;
function fullyLoaded(callback: () => void): void;
function fixed(number: number, precision?: number): string;
function isEmbeddedPlayer(): boolean;
function isIframe(): boolean;
function getI18nKey(): string;
function dq(selector: string): Element | null;
function dq(element: Element, selector: string): Element | null;
function dqa(selector: string): Element[];
function dqa(element: Element, selector: string): Element[];
function addSettingsListener(key: keyof BilibiliEvolvedSettings, handler: (newValue: any, oldValue: any) => void, initCall?: boolean): void
function removeSettingsListener(key: keyof BilibiliEvolvedSettings, handler: (newValue: any, oldValue: any) => void): void
function raiseEvent(element: Element, eventName: string): void
function loadLazyPanel(selector: string): Promise<void>
function loadDanmakuSettingsPanel(): Promise<void>
function contentLoaded(callback: () => void): void
function fullyLoaded(callback: () => void): void
function fixed(number: number, precision?: number): string
function isEmbeddedPlayer(): boolean
function isIframe(): boolean
function getI18nKey(): string
function dq(selector: string): Element | null
function dq(element: Element, selector: string): Element | null
function dqa(selector: string): Element[]
function dqa(element: Element, selector: string): Element[]
function html(strings: TemplateStringsArray, ...values: unknown[]): string
const formatFileSize: (bytes: number, fixed?: number) => string
const formatDuration: (time: number, fixed?: number) => string
@ -470,4 +471,4 @@ declare global {
type ScriptVersion = 'Stable' | 'Preview' | 'Offline' | 'Preview Offline' | 'Local' | 'Local preview' | 'Local stable' | 'Local offline' | 'Local preview offline'
const scriptVersion: ScriptVersion
}
export { };
export { }

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -72,7 +72,7 @@
"full-tweets-title.min.css": "13A0CF1C96F374CED3FA59A532E28B4B620D7A4C374385A363F32AD1A7656764",
"full-tweets-title.min.js": "DD57BB732ABEF7739CA84AEFF97E86F8984FCC4A8A75B957213622350B2A7C37",
"gui-settings.min.css": "5E8B45124CFC7C4AE69C90E7462A918C59DC90EB5DB3B1AFA90010D96813D1EF",
"gui-settings.min.html": "1E6D65A172D8EA7832458DE97653FF34CB895B8B857459C0C59AE655499E4FA3",
"gui-settings.min.html": "36F47CEB9F55F4534516ABBF827F0748A6D1C4FD6683B04E09AA386776532153",
"gui-settings.min.js": "F16F00703C27B37A75255444D3C255222857FD8D5061598D80174B56F2F1EC6A",
"haruna-scale.min.js": "D046864416831B101582DD87E602AE21309FDE2DB64A8F24D57B6ADBE67E6D7B",
"hide-bangumi-reviews.min.js": "7265C0CE994FDA926355A9A4F9B207E7E68E749D47332F3C537EF93E97927A23",
@ -172,6 +172,7 @@
"trending-videos.min.js": "CBD579F9C07B5B612B50C1522F05CD8B49AE9E1F47BB95896FE91BB032656FB1",
"trending-videos.vue.min.js": "DA96C03E52FDA7561B23F072AB794453D72E3CED523F9F5374A16885445F9925",
"tweets.min.css": "9015C1F165C91B9205ABBE4E8A3B5FA83DB1EB4B5CF2442846AF61E44FF178A8",
"url-params-clean.min.js": "4819BF0209A252D690C8787B95312FF39D36E95FE9AE7894EFE9323B395D896C",
"v-checkbox.vue.min.js": "A23C35D5627009A29FD396A024442A19E37DEE70674BF3CE0FA377D781ED2231",
"v-dropdown.vue.min.js": "D26B4A74515F53A34A3CB0590FC9683476D99FBBBB9647FDFCBF33E265C3F662",
"video-card.vue.min.js": "9EBC38E9F9CD6BDE3CC031BB88F6447EB29E7D8A2E7C32159D7BDC6CFD956D74",

Binary file not shown.

File diff suppressed because one or more lines are too long

1
min/url-params-clean.min.js vendored Normal file
View File

@ -0,0 +1 @@
(()=>{return(t,r)=>{const e=["spm_id_from","from_source","from","seid"];const s=location.search.substring(1).split("&");const o=s.filter(t=>{if(e.some(r=>t.startsWith(`${r}=`))){return false}return true}).join("&");history.pushState({},document.title,document.URL.replace(location.search,o?"?"+o:""))}})();

View File

@ -775,5 +775,11 @@ Resource.manifest = {
hideRelatedVideos: '隐藏视频推荐',
},
},
urlParamsClean: {
path: 'url-params-clean.min.js',
displayNames: {
urlParamsClean: '网址参数清理',
},
}
}
export const resourceManifest = Resource.manifest

View File

@ -197,6 +197,7 @@ export const settings = {
customStyles: [],
simpleHomeCategoryOrders: { ...simpleHomeCategoryDefaultOrders },
keymapJumpSeconds: 85,
urlParamsClean: false,
cache: {},
}
const fixedSettings = {

View File

@ -123,6 +123,7 @@
<checkbox indent="0" key="selectableColumnText" dependencies=""></checkbox>
<checkbox indent="0" key="watchlaterExpireWarnings" dependencies=""></checkbox>
<checkbox indent="0" key="autoMatchMedal" dependencies=""></checkbox>
<checkbox indent="0" key="urlParamsClean" dependencies=""></checkbox>
<!-- <checkbox indent="0" key="noMiniVideoAutoplay" dependencies=""></checkbox> -->
<category icon="touch">触摸</category>
<checkbox indent="0" key="touchNavBar" dependencies=""></checkbox>

View File

@ -0,0 +1,14 @@
const blockParams = [
'spm_id_from',
'from_source',
'from',
'seid',
]
const urlParams = location.search.substring(1).split('&')
const filteredParams = urlParams.filter(p => {
if (blockParams.some(b => p.startsWith(`${b}=`))) {
return false
}
return true
}).join('&')
history.pushState({}, document.title, document.URL.replace(location.search, filteredParams ? ('?' + filteredParams) : ''))