A privacy-first, self-hosted, fully open source personal knowledge management software, written in typescript and golang. (PERSONAL FORK)
1export const addScriptSync = async (path: string, id: string) => {
2 if (document.getElementById(id)) {
3 return false;
4 }
5 const xhrObj = new XMLHttpRequest();
6 xhrObj.open("GET", path, false);
7 xhrObj.setRequestHeader("Accept",
8 "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript, */*; q=0.01");
9 xhrObj.send("");
10 const scriptElement = document.createElement("script");
11 scriptElement.type = "text/javascript";
12 scriptElement.text = xhrObj.responseText;
13 scriptElement.id = id;
14 document.head.appendChild(scriptElement);
15 if (typeof Lute === "undefined") {
16 // 鸿蒙系统上第一次加载会出现 Lute 未定义的情况,重新载入一次就好了,暂时没找到原因,先这样处理
17 window.location.reload();
18 }
19};
20
21export const addScript = (path: string, id: string) => {
22 return new Promise((resolve) => {
23 if (document.getElementById(id)) {
24 // 脚本加载后再次调用直接返回
25 resolve(false);
26 return false;
27 }
28 const scriptElement = document.createElement("script");
29 scriptElement.src = path;
30 scriptElement.async = true;
31 // 循环调用时 Chrome 不会重复请求 js
32 document.head.appendChild(scriptElement);
33 scriptElement.onload = () => {
34 if (document.getElementById(id)) {
35 // 循环调用需清除 DOM 中的 script 标签
36 scriptElement.remove();
37 resolve(false);
38 return false;
39 }
40 scriptElement.id = id;
41 resolve(true);
42 };
43 });
44};