A privacy-first, self-hosted, fully open source personal knowledge management software, written in typescript and golang. (PERSONAL FORK)
at lambda-fork/main 44 lines 1.7 kB view raw
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};