Files
coco-app/src/hooks/useScript.ts

49 lines
1.2 KiB
TypeScript
Raw Normal View History

import { useEffect, useState } from 'react';
2025-04-08 15:24:12 +08:00
const useScript = (src: string, onError?: () => void) => {
2025-04-08 15:24:12 +08:00
useEffect(() => {
if (document.querySelector(`script[src="${src}"]`)) {
return; // Prevent duplicate script loading
}
const script = document.createElement('script');
script.src = src;
script.async = true;
script.onerror = () => {
console.error(`Failed to load script: ${src}`);
if (onError) onError();
};
2025-04-08 15:24:12 +08:00
document.body.appendChild(script);
return () => {
document.body.removeChild(script);
};
}, [src, onError]);
2025-04-08 15:24:12 +08:00
};
export default useScript;
export const useIconfontScript = () => {
const appStore = JSON.parse(localStorage.getItem("app-store") || "{}");
const [useLocalFallback, setUseLocalFallback] = useState(false);
let baseURL = appStore.state?.endpoint_http
if (!baseURL || baseURL === "undefined") {
baseURL = "";
}
if (useLocalFallback || baseURL === "") {
useScript('/assets/fonts/icons/iconfont.js');
return;
}
useScript(`${baseURL}/assets/fonts/icons/iconfont.js`, () => {
console.log("Remote iconfont loading failed, falling back to local resource");
setUseLocalFallback(true);
});
2025-04-08 15:24:12 +08:00
};