luciopaiva / witchcraft

Inject Javascript and CSS right from your file system. Think GreaseMonkey for more advanced users.
https://luciopaiva.com/witchcraft
MIT License
254 stars 18 forks source link

check if scripts exist (v3 branch) #61

Open mjuksel opened 4 months ago

mjuksel commented 4 months ago

Consider adding a check if scripts exist already on v3 branch, it was adding 4 copies of it on the page.

Changed this in util/embed-script.js:

export function injector(document) {
  if (document.documentElement.querySelector("#witchcraft-script")) return;

  const fnStr = function fn() {
    /*INJECTION_POINT*/
  }.toString();
  const script = document.createElement("script");
  script.id = "witchcraft-script";
  script.text = `(${fnStr})()`;
  // when injecting at document_start, experimentation shows that <head> doesn't exist and <body> may not exist either
  // this is why here we are injecting the script tag directly into <html>, which seems guaranteed to exist
  document.documentElement.appendChild(script);
}