Created
June 17, 2022 03:17
-
-
Save Brontojoris/0d1f4da199b136c6e60194f57d5b32e3 to your computer and use it in GitHub Desktop.
Tampermonkey utls
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(() => { | |
"use strict"; | |
const Event = class { | |
constructor(script, target) { | |
this.script = script; | |
this.target = target; | |
this._cancel = false; | |
this._replace = null; | |
this._stop = false; | |
} | |
preventDefault() { | |
this._cancel = true; | |
} | |
stopPropagation() { | |
this._stop = true; | |
} | |
replacePayload(payload) { | |
this._replace = payload; | |
} | |
}; | |
let callbacks = []; | |
window.addBeforeScriptExecuteListener = (f) => { | |
if (typeof f !== "function") { | |
throw new Error("Event handler must be a function."); | |
} | |
callbacks.push(f); | |
}; | |
window.removeBeforeScriptExecuteListener = (f) => { | |
let i = callbacks.length; | |
while (i--) { | |
if (callbacks[i] === f) { | |
callbacks.splice(i, 1); | |
} | |
} | |
}; | |
const dispatch = (script, target) => { | |
if (script.tagName !== "SCRIPT") { | |
return; | |
} | |
const e = new Event(script, target); | |
if (typeof window.onbeforescriptexecute === "function") { | |
try { | |
window.onbeforescriptexecute(e); | |
} catch (err) { | |
console.error(err); | |
} | |
} | |
for (const func of callbacks) { | |
if (e._stop) { | |
break; | |
} | |
try { | |
func(e); | |
} catch (err) { | |
console.error(err); | |
} | |
} | |
if (e._cancel) { | |
script.textContent = ""; | |
script.remove(); | |
} else if (typeof e._replace === "string") { | |
script.textContent = e._replace; | |
} | |
}; | |
const observer = new MutationObserver((mutations) => { | |
for (const m of mutations) { | |
for (const n of m.addedNodes) { | |
dispatch(n, m.target); | |
} | |
} | |
}); | |
observer.observe(document, { | |
childList: true, | |
subtree: true, | |
}); | |
})(); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment