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