export interface JavaScriptCollection {
internal: Array<{
element: HTMLScriptElement;
}>;
external: Array<{
element: HTMLScriptElement;
src: string;
}>;
[key: string]: any;
}
/**
* 采集页面中已经存在的 JavaScript 脚本,包括内部脚本和外部脚本两种
*
* - 内部脚本:(InternalScript)指 JavaScript 代码直接写在 `` 标签内部
*
* - 外部脚本:(ExternalScript)指通过设置 `` 标签的 `src` 属性进行引入的 JavaScript 脚本文件
*
* @refer https://developer.mozilla.org/zh-CN/docs/Web/HTML/Element/script#attr-type
*/
export declare const collectJavaScript: () => JavaScriptCollection;
export interface SingleJavaScriptLoadOptions {
src: string;
name?: string;
group?: string;
collect?: (element: HTMLScriptElement) => unknown;
isolate?: () => void;
deisolate?: () => void;
beforeLoad?: (contexts: {
src: string;
name?: string;
}) => void;
onLoad?: (contexts: {
src: string;
name?: string;
element: HTMLScriptElement;
options: SingleJavaScriptLoadOptions;
}) => void;
afterLoad?: (contexts: {
src: string;
name?: string;
element: HTMLScriptElement;
}) => void;
onError?: (contexts: {
src: string;
name?: string;
options: SingleJavaScriptLoadOptions;
error: string | Event;
reject: (reason?: any) => void;
}) => void;
}
export interface SingleJavaScriptLoadResult extends SingleJavaScriptLoadOptions {
element: HTMLScriptElement;
pack?: unknown;
}
/**
* 将指定的 script 脚本加载到页面中
*
* 加载之前进行检测:
* - 如果指定地址(src)的脚本已经存在于页面中,直接返回该脚本作为加载结果
* - 如果指定地址(src)的脚本不存在于页面中,则通过插入 `script` 标签的方式将脚本加载到页面中,然后返回加载结果
*
* 以 `script` 标签加载到页面中的脚本全部拥有 JavaScript 环境的完全访问权限,当脚本加载涉及到全局变量的变更时,
* 并行加载会出现难以预料的错误,所以这里统一采用串行加载。
* - 加载器会维护一个加载队列,只有先申请的脚本加载完成之后才会加载后申请的脚本
* - 脚本加载的选项中可以定义辅助隔离全局变量的函数(isolate、deisolate),
* 在加载某个脚本之前,加载器会遍历执行其它已加载的脚本的 isolate 函数,加载完成之后,再遍历执行已加载脚本的 deisolate 函数。
*
* @refer https://developer.mozilla.org/zh-CN/docs/Web/API/HTMLScriptElement
*/
export declare const loadSingleJavascript: (options: SingleJavaScriptLoadOptions) => Promise;
export interface MultipleJavaScriptLoadOptions {
options: Array;
onLoad?: SingleJavaScriptLoadOptions['onLoad'];
onError?: SingleJavaScriptLoadOptions['onError'];
}
export interface MultipleJavaScriptLoadResult {
success: SingleJavaScriptLoadResult[];
fail: Array<{
src: string;
reason: any;
}>;
}
export declare const loadMultipleJavaScript: (options: MultipleJavaScriptLoadOptions) => Promise;
//# sourceMappingURL=loader.data.d.ts.map