Joyn.de Adblocker

Adblocker for Joyn.de, because the common adblockers are blocked

  1. // ==UserScript==
  2. // @name Joyn.de Adblocker
  3. // @name:de Joyn.de Adblocker
  4. // @version 2.0.0
  5. // @description Adblocker for Joyn.de, because the common adblockers are blocked
  6. // @description:de Adblocker für Joyn.de, da die gängigen Adblocker blockiert werden
  7. // @icon https://www.joyn.de/favicon.ico
  8. // @author TalkLounge (https://github.com/TalkLounge)
  9. // @namespace https://github.com/TalkLounge/joyn.de-adblocker
  10. // @license MIT
  11. // @match https://www.joyn.de/*
  12. // @grant none
  13. // @run-at document-start
  14. // ==/UserScript==
  15.  
  16. (function () {
  17. 'use strict';
  18.  
  19. const old_window_top_fetch = window.top.fetch;
  20.  
  21. function checkURL(args, url) {
  22. if (
  23. (
  24. typeof (args[0]) == "object" &&
  25. args[0].url &&
  26. new URL(args[0].url).host.includes(url)
  27. ) || (
  28. typeof (args[0]) == "string" &&
  29. args[0] &&
  30. new URL(args[0]).host.includes(url)
  31. )
  32. ) {
  33. return true;
  34. }
  35. }
  36.  
  37. window.top.fetch = function (...args) {
  38. if ([
  39. "sqrt-5041.de",
  40. "ad71.adfarm1.adition.com",
  41. "bat.bing.com",
  42. "9478953.fls.doubleclick.net",
  43. "googleads.g.doubleclick.net",
  44. "connect.facebook.net",
  45. "static.hotjar.com",
  46. "cdn-gl.nmrodam.com",
  47. "amplify.outbrain.com",
  48. "tr.outbrain.com",
  49. "alb.reddit.com",
  50. "cdn.segment.com",
  51. "o292998.ingest.sentry.io",
  52. "dmp.theadex.com",
  53. "analytics.tiktok.com"
  54. ].find(item => checkURL(args, item))) { // Block Ad & Tracking Web Requests from Privacy Badger Extension
  55. return;
  56. }
  57.  
  58. if (!checkURL(args, "swankyrule.zomap.de")) { // Don't Intercept other Web Requests except https://swankyrule.zomap.de/v2/
  59. return old_window_top_fetch.apply(null, args);
  60. }
  61.  
  62. return new Promise(async (resolve, reject) => {
  63. const data = await old_window_top_fetch.apply(null, args);
  64. const text = await (await data.clone()).text();
  65. if (text.indexOf("<MediaFiles>") == -1) {
  66. return resolve(data);
  67. }
  68. data.text = function () {
  69. return new Promise((resolve, reject) => {
  70. const xmlDoc = new DOMParser().parseFromString(text, "text/xml");
  71. xmlDoc.querySelectorAll("MediaFile").forEach((item) => item.remove()); // Delete all MediaFile Elements in XML
  72. resolve(new XMLSerializer().serializeToString(xmlDoc));
  73. });
  74. };
  75. resolve(data);
  76. });
  77. };
  78. })();