course-helper/script/tempermonkey.d.ts
2025-05-08 20:05:49 +08:00

309 lines
8.5 KiB
TypeScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/**
unsafeWindow 对象提供对页面 javascript 函数和变量的完全访问。
*/
declare var unsafeWindow: Window;
/**
获取有关脚本和 TM 的一些信息。
*/
declare var GM_info: {
version: string;
scriptWillUpdate: boolean;
scriptHandler: "Tampermonkey";
scriptUpdateURL?: string;
scriptSource: string;
scriptMetaStr?: string;
isIncognito: boolean;
downloadMode: "native" | "disabled" | "browser";
script: {
author?: string;
description?: string;
excludes: string[];
homepage?: string;
icon?: string;
icon64?: string;
includes?: string[];
lastModified: number;
matches: string[];
name: string;
namespace?: string;
position: number;
"run-at": string;
resources: string[];
unwrap: boolean;
version: string;
options: {
awareOfChrome: boolean;
run_at: string;
noframes?: boolean;
compat_arrayLeft: boolean;
compat_foreach: boolean;
compat_forvarin: boolean;
compat_metadata: boolean;
compat_uW_gmonkey: boolean;
override: {
orig_excludes: string[];
orig_includes: string[];
use_includes: string[];
use_excludes: string[];
[key: string]: any;
};
[key: string]: any;
};
[key: string]: any;
};
[key: string]: any;
};
/**
将给定的样式添加到文档并返回注入的样式元素。
*/
declare function GM_addStyle(css: string): void;
/**
创建一个由“tag_name”指定的 HTML 元素并应用所有给定的“属性”并返回注入的 HTML 元素。
*/
declare function GM_addElement(tag_name: string, attributes: object);
/**
创建一个由“tag_name”指定的 HTML 元素并应用所有给定的“属性”并返回注入的 HTML 元素。如果给出了“parent_node”则将其附加到它或以其他方式附加到文档头或体。
*/
declare function GM_addElement(parent_node: HTMLElement, tag_name: string, attributes: object);
/**
从存储中删除“名称”。
*/
declare function GM_deleteValue(name: string): void;
/**
列出存储的所有名称。
*/
declare function GM_listValues(): string[];
/**
将更改侦听器添加到存储并返回侦听器 ID。
'name' 是观察变量的名称。
回调函数的“remote”参数显示该值是从另一个选项卡的实例 (true) 还是在此脚本实例 (false) 中修改的。
因此,不同浏览器选项卡的脚本可以使用此功能相互通信。
*/
declare function GM_addValueChangeListener(
name: string,
listener: GM_Types.ValueChangeListener
): number;
/**
按 ID 删除更改​​侦听器。
*/
declare function GM_removeValueChangeListener(listenerId: number): void;
/**
设置本地存储'name'的值。
*/
declare function GM_setValue(name: string, value: any): void;
/**
从存储中获取 'name' 的值。
*/
declare function GM_getValue(name: string, defaultValue?: any): any;
/**
将消息打印到控制台。
*/
declare function GM_log(message: string): any;
/**
获取脚本头中预定义的@resource 标记的内容。
*/
declare function GM_getResourceText(name: string): string;
/**
获取脚本标头处预定义 @resource 标记的 base64 编码 URI。
*/
declare function GM_getResourceURL(name: string): string;
/**
在运行此脚本的页面的 Tampermonkey 菜单中注册要显示的菜单,并返回菜单命令 ID。
*/
declare function GM_registerMenuCommand(
name: string,
listener: Function,
accessKey?: string
): number;
/**
使用给定的菜单命令 ID 取消注册先前由 GM_registerMenuCommand 注册的菜单命令。
*/
declare function GM_unregisterMenuCommand(id: number): void;
/**
使用此 url 打开一个新选项卡。
*/
declare function GM_openInTab(url: string, options: GM_Types.OpenTabOptions): void;
/**
使用此 url 打开一个新选项卡。
*/
declare function GM_openInTab(url: string, loadInBackground: boolean): void;
/**
使用此 url 打开一个新选项卡。
*/
declare function GM_openInTab(url: string): void;
/**
创建一个 xmlHttpRequest。
*/
declare function GM_xmlhttpRequest<CONTEXT_TYPE>(
details: GM_Types.XHRDetails<CONTEXT_TYPE>
): GM_Types.AbortHandle<void>;
/**
将给定的 URL 下载到本地磁盘。
*/
declare function GM_download(details: GM_Types.DownloadDetails): GM_Types.AbortHandle<boolean>;
/**
将给定的 URL 下载到本地磁盘。
*/
declare function GM_download(url: string, filename: string): GM_Types.AbortHandle<boolean>;
/**
只要此选项卡处于打开状态,就获取一个持久对象。
*/
declare function GM_getTab(callback: (obj: object) => any): void;
/**
保存选项卡对象以在页面卸载后重新打开它。
*/
declare function GM_saveTab(obj: object): void;
/**
获取所有选项卡对象作为散列以与其他脚本实例通信。
*/
declare function GM_getTabs(callback: (objs: { [key: number]: object }) => any): void;
/**
显示 HTML5 桌面通知和/或突出显示当前选项卡。
*/
declare function GM_notification(details: GM_Types.NotificationDetails, ondone: Function): void;
/**
显示 HTML5 桌面通知和/或突出显示当前选项卡。
*/
declare function GM_notification(
text: string,
title: string,
image: string,
onclick: Function
): void;
/**
将数据复制到剪贴板。参数 'info' 可以是像“{ type: 'text', mimetype: 'text/plain'}”这样的对象或者只是一个表示类型的字符串“text”或“html”
*/
declare function GM_setClipboard(
data: string,
info?: string | { type?: string; mimetype?: string }
): void;
declare namespace GM_Types {
type ValueChangeListener = (name: string, oldValue: any, newValue: any, remote: boolean) => any;
interface OpenTabOptions {
active?: boolean;
insert?: boolean;
setParent?: boolean;
}
interface XHRResponse<CONTEXT_TYPE> extends Function {
DONE: 4;
HEADERS_RECEIVED: 2;
LOADING: 3;
OPENED: 1;
UNSENT: 0;
context: CONTEXT_TYPE;
finalUrl: string;
readyState: 0 | 1 | 2 | 3 | 4;
responseHeaders: string;
status: number;
statusText: string;
response: string | null;
responseText: string;
responseXML: Document | null;
}
interface XHRProgress<CONTEXT_TYPE> extends XHRResponse<CONTEXT_TYPE> {
done: number;
lengthComputable: boolean;
loaded: number;
position: number;
total: number;
totalSize: number;
}
type Listener<OBJ> = (this: OBJ, event: OBJ) => any;
interface XHRDetails<CONTEXT_TYPE> {
method?: "GET" | "HEAD" | "POST";
url?: string;
headers?: { readonly [key: string]: string };
data?: string;
binary?: boolean;
timeout?: number;
context?: CONTEXT_TYPE;
responseType?: "arraybuffer" | "blob" | "json";
overrideMimeType?: string;
anonymous?: boolean;
fetch?: boolean;
username?: string;
password?: string;
onload?: Listener<XHRResponse<CONTEXT_TYPE>>;
onloadstart?: Listener<XHRResponse<CONTEXT_TYPE>>;
onprogress?: Listener<XHRProgress<CONTEXT_TYPE>>;
onreadystatechange?: Listener<XHRResponse<CONTEXT_TYPE>>;
ontimeout?: Listener<Function>;
onabort?: Function;
onerror?: Function;
}
interface AbortHandle<RETURN_TYPE> {
abort(): RETURN_TYPE;
}
interface DownloadError {
error:
| "not_enabled"
| "not_whitelisted"
| "not_permitted"
| "not_supported"
| "not_succeeded";
details?: string;
}
interface DownloadDetails {
url: string;
name: string;
headers?: { readonly [key: string]: string };
saveAs?: boolean;
timeout?: number;
onerror?: Listener<DownloadError>;
ontimeout?: Listener<object>;
onload?: Listener<object>;
onprogress?: Listener<XHRProgress<void>>;
}
interface NotificationThis extends NotificationDetails {
id: string;
}
type NotificationOnClick = (this: NotificationThis) => any;
type NotificationOnDone = (this: NotificationThis, clicked: boolean) => any;
interface NotificationDetails {
text?: string;
title?: string;
image?: string;
highlight?: boolean;
timeout?: number;
onclick?: NotificationOnClick;
ondone?: NotificationOnDone;
}
}