34 lines
979 B
TypeScript
34 lines
979 B
TypeScript
export const executeScripts = (element: Element) => {
|
|
if (!element) {
|
|
return;
|
|
}
|
|
|
|
const scripts = element.getElementsByTagName('script');
|
|
const scriptArray = Array.from(scripts);
|
|
for (let i = 0; i < scriptArray.length; i++) {
|
|
const oldScript = scriptArray[i];
|
|
executeScript(oldScript);
|
|
}
|
|
};
|
|
|
|
export const executeScript = (scriptElement: HTMLScriptElement) => {
|
|
const newScript = document.createElement('script');
|
|
Array.from(scriptElement.attributes).forEach((attr) => {
|
|
newScript.setAttribute(attr.name, attr.value);
|
|
});
|
|
|
|
if (scriptElement.src) {
|
|
newScript.src = scriptElement.src;
|
|
} else {
|
|
if (scriptElement.textContent?.trim()?.startsWith('(function() {')) {
|
|
newScript.textContent = scriptElement.textContent;
|
|
} else {
|
|
newScript.textContent = `(function() { ${scriptElement.textContent} })();`;
|
|
}
|
|
}
|
|
|
|
if (scriptElement.parentNode) {
|
|
scriptElement.parentNode.replaceChild(newScript, scriptElement);
|
|
}
|
|
};
|