Fix Worker conflict detection #294

This commit is contained in:
pixeltris
2024-11-03 17:55:59 +00:00
parent 13f80faf3d
commit 722f5b9624
4 changed files with 66 additions and 14 deletions
+16 -3
View File
@@ -26,6 +26,19 @@ twitch-videoad.js text/javascript
var OriginalVideoPlayerQuality = null;
var IsPlayerAutoQuality = null;
const oldWorker = window.Worker;
function isWorkerDoubleHooked(ourWorker, identifier) {
var ourWorkerString = ourWorker ? ourWorker.toString() : null;
var proto = window.Worker;
while (proto)
{
var workerString = proto.toString();
if (workerString.includes(identifier) && workerString !== ourWorkerString) {
return true;
}
proto = Object.getPrototypeOf(proto);
}
return false;
}
function hookWindowWorker() {
var newWorker = window.Worker = class Worker extends oldWorker {
constructor(twitchBlobUrl, options) {
@@ -33,7 +46,7 @@ twitch-videoad.js text/javascript
try {
isTwitchWorker = new URL(twitchBlobUrl).origin.endsWith('.twitch.tv');
} catch {}
if (newWorker.toString() !== window.Worker.toString()) {
if (isWorkerDoubleHooked(newWorker, 'twitch')) {
console.log('Multiple twitch adblockers installed. Skipping Worker hook (vaft)');
isTwitchWorker = false;
}
@@ -862,8 +875,8 @@ twitch-videoad.js text/javascript
}
}catch{}
}
if (window.Worker.toString().includes('twitch')) {
console.log('Twitch Worker is already hooked');
if (isWorkerDoubleHooked(null, 'twitch')) {
console.log('Twitch Worker is already hooked. Skipping (vaft)');
} else {
window.reloadTwitchPlayer = reloadTwitchPlayer;
declareOptions(window);