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

View File

@ -26,6 +26,19 @@ twitch-videoad.js text/javascript
var OriginalVideoPlayerQuality = null; var OriginalVideoPlayerQuality = null;
var IsPlayerAutoQuality = null; var IsPlayerAutoQuality = null;
const oldWorker = window.Worker; 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() { function hookWindowWorker() {
var newWorker = window.Worker = class Worker extends oldWorker { var newWorker = window.Worker = class Worker extends oldWorker {
constructor(twitchBlobUrl, options) { constructor(twitchBlobUrl, options) {
@ -33,7 +46,7 @@ twitch-videoad.js text/javascript
try { try {
isTwitchWorker = new URL(twitchBlobUrl).origin.endsWith('.twitch.tv'); isTwitchWorker = new URL(twitchBlobUrl).origin.endsWith('.twitch.tv');
} catch {} } catch {}
if (newWorker.toString() !== window.Worker.toString()) { if (isWorkerDoubleHooked(newWorker, 'twitch')) {
console.log('Multiple twitch adblockers installed. Skipping Worker hook (vaft)'); console.log('Multiple twitch adblockers installed. Skipping Worker hook (vaft)');
isTwitchWorker = false; isTwitchWorker = false;
} }
@ -862,8 +875,8 @@ twitch-videoad.js text/javascript
} }
}catch{} }catch{}
} }
if (window.Worker.toString().includes('twitch')) { if (isWorkerDoubleHooked(null, 'twitch')) {
console.log('Twitch Worker is already hooked'); console.log('Twitch Worker is already hooked. Skipping (vaft)');
} else { } else {
window.reloadTwitchPlayer = reloadTwitchPlayer; window.reloadTwitchPlayer = reloadTwitchPlayer;
declareOptions(window); declareOptions(window);

View File

@ -1,7 +1,7 @@
// ==UserScript== // ==UserScript==
// @name TwitchAdSolutions (vaft) // @name TwitchAdSolutions (vaft)
// @namespace https://github.com/pixeltris/TwitchAdSolutions // @namespace https://github.com/pixeltris/TwitchAdSolutions
// @version 13.0.0 // @version 14.0.0
// @description Multiple solutions for blocking Twitch ads (vaft) // @description Multiple solutions for blocking Twitch ads (vaft)
// @updateURL https://github.com/pixeltris/TwitchAdSolutions/raw/master/vaft/vaft.user.js // @updateURL https://github.com/pixeltris/TwitchAdSolutions/raw/master/vaft/vaft.user.js
// @downloadURL https://github.com/pixeltris/TwitchAdSolutions/raw/master/vaft/vaft.user.js // @downloadURL https://github.com/pixeltris/TwitchAdSolutions/raw/master/vaft/vaft.user.js
@ -38,6 +38,19 @@
var OriginalVideoPlayerQuality = null; var OriginalVideoPlayerQuality = null;
var IsPlayerAutoQuality = null; var IsPlayerAutoQuality = null;
const oldWorker = window.Worker; 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() { function hookWindowWorker() {
var newWorker = window.Worker = class Worker extends oldWorker { var newWorker = window.Worker = class Worker extends oldWorker {
constructor(twitchBlobUrl, options) { constructor(twitchBlobUrl, options) {
@ -45,7 +58,7 @@
try { try {
isTwitchWorker = new URL(twitchBlobUrl).origin.endsWith('.twitch.tv'); isTwitchWorker = new URL(twitchBlobUrl).origin.endsWith('.twitch.tv');
} catch {} } catch {}
if (newWorker.toString() !== window.Worker.toString()) { if (isWorkerDoubleHooked(newWorker, 'twitch')) {
console.log('Multiple twitch adblockers installed. Skipping Worker hook (vaft)'); console.log('Multiple twitch adblockers installed. Skipping Worker hook (vaft)');
isTwitchWorker = false; isTwitchWorker = false;
} }
@ -874,8 +887,8 @@
} }
}catch{} }catch{}
} }
if (window.Worker.toString().includes('twitch')) { if (isWorkerDoubleHooked(null, 'twitch')) {
console.log('Twitch Worker is already hooked'); console.log('Twitch Worker is already hooked. Skipping (vaft)');
} else { } else {
window.reloadTwitchPlayer = reloadTwitchPlayer; window.reloadTwitchPlayer = reloadTwitchPlayer;
declareOptions(window); declareOptions(window);

View File

@ -25,6 +25,19 @@ twitch-videoad.js text/javascript
} }
var twitchWorkers = []; var twitchWorkers = [];
const oldWorker = window.Worker; 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() { function hookWindowWorker() {
var newWorker = window.Worker = class Worker extends oldWorker { var newWorker = window.Worker = class Worker extends oldWorker {
constructor(twitchBlobUrl, options) { constructor(twitchBlobUrl, options) {
@ -32,7 +45,7 @@ twitch-videoad.js text/javascript
try { try {
isTwitchWorker = new URL(twitchBlobUrl).origin.endsWith('.twitch.tv'); isTwitchWorker = new URL(twitchBlobUrl).origin.endsWith('.twitch.tv');
} catch {} } catch {}
if (newWorker.toString() !== window.Worker.toString()) { if (isWorkerDoubleHooked(newWorker, 'twitch')) {
console.log('Multiple twitch adblockers installed. Skipping Worker hook (video-swap-new)'); console.log('Multiple twitch adblockers installed. Skipping Worker hook (video-swap-new)');
isTwitchWorker = false; isTwitchWorker = false;
} }
@ -653,8 +666,8 @@ twitch-videoad.js text/javascript
return realGetItem.apply(this, arguments); return realGetItem.apply(this, arguments);
}; };
} }
if (window.Worker.toString().includes('twitch')) { if (isWorkerDoubleHooked(null, 'twitch')) {
console.log('Twitch Worker is already hooked'); console.log('Twitch Worker is already hooked. Skipping (video-swap-new)');
} else { } else {
window.reloadTwitchPlayer = reloadTwitchPlayer; window.reloadTwitchPlayer = reloadTwitchPlayer;
declareOptions(window); declareOptions(window);

View File

@ -1,7 +1,7 @@
// ==UserScript== // ==UserScript==
// @name TwitchAdSolutions (video-swap-new) // @name TwitchAdSolutions (video-swap-new)
// @namespace https://github.com/pixeltris/TwitchAdSolutions // @namespace https://github.com/pixeltris/TwitchAdSolutions
// @version 1.31 // @version 1.32
// @updateURL https://github.com/pixeltris/TwitchAdSolutions/raw/master/video-swap-new/video-swap-new.user.js // @updateURL https://github.com/pixeltris/TwitchAdSolutions/raw/master/video-swap-new/video-swap-new.user.js
// @downloadURL https://github.com/pixeltris/TwitchAdSolutions/raw/master/video-swap-new/video-swap-new.user.js // @downloadURL https://github.com/pixeltris/TwitchAdSolutions/raw/master/video-swap-new/video-swap-new.user.js
// @description Multiple solutions for blocking Twitch ads (video-swap-new) // @description Multiple solutions for blocking Twitch ads (video-swap-new)
@ -37,6 +37,19 @@
} }
var twitchWorkers = []; var twitchWorkers = [];
const oldWorker = window.Worker; 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() { function hookWindowWorker() {
var newWorker = window.Worker = class Worker extends oldWorker { var newWorker = window.Worker = class Worker extends oldWorker {
constructor(twitchBlobUrl, options) { constructor(twitchBlobUrl, options) {
@ -44,7 +57,7 @@
try { try {
isTwitchWorker = new URL(twitchBlobUrl).origin.endsWith('.twitch.tv'); isTwitchWorker = new URL(twitchBlobUrl).origin.endsWith('.twitch.tv');
} catch {} } catch {}
if (newWorker.toString() !== window.Worker.toString()) { if (isWorkerDoubleHooked(newWorker, 'twitch')) {
console.log('Multiple twitch adblockers installed. Skipping Worker hook (video-swap-new)'); console.log('Multiple twitch adblockers installed. Skipping Worker hook (video-swap-new)');
isTwitchWorker = false; isTwitchWorker = false;
} }
@ -665,8 +678,8 @@
return realGetItem.apply(this, arguments); return realGetItem.apply(this, arguments);
}; };
} }
if (window.Worker.toString().includes('twitch')) { if (isWorkerDoubleHooked(null, 'twitch')) {
console.log('Twitch Worker is already hooked'); console.log('Twitch Worker is already hooked. Skipping (video-swap-new)');
} else { } else {
window.reloadTwitchPlayer = reloadTwitchPlayer; window.reloadTwitchPlayer = reloadTwitchPlayer;
declareOptions(window); declareOptions(window);