This page intentionally left blank
Kein HTML5-Video-Autoplay in Safari

Es ist unglaublich, aber seit Jahren schon muss man sich von selbst abspielenden Videos auf Websites gängeln lassen. So mancher Browser bietet monatlich ein Update in Form einer komplett neuen Versionsnummer, doch dass HTML5-Videos nicht automatisch loslegen (können), sobald eine Seite geladen ist, das scheint in Ding der Unmöglichkeit für die Browser-Programmierer.

HTML5 und der Verzicht auf Flash bringt in diesem Fall nicht nur Vorteile mit sich: Früher mit Flash (bzw. einem Browser, der kein HTML5-Video abspielen kann) waren nervige Videos in Safari schnell mit einem Plugin wie PluginCustoms oder ClickToPlugin blockiert.
Aber schon seit Jahren setzen Websites was die eingebundenen Videos betrifft immer mehr auf den HTML5-Standard, was an sich ja keine schlechte Sache wäre, wenn es hier nicht nur die dämliche Möglichkeit geben würde, dass diese Videos – ob es der Seitenbesucher nun will oder nicht – sofort loslegen können...und keiner der großen Browser die Möglichkeit bietet, das in den Einstellungen irgendwo generell zu verbieten.

Da sich nach einigen Jahren immer noch kein richtiges Plugin für Safari das Licht der Welt erblickt hat, welches nerviges Autoplay verbietet (abgesehen vielleicht vom JSBlocker... aber der ist mir für diesen einen Anwendungsfall irgendwie zu viel des Guten und funktioniert in Safari 5.0.5 nicht) habe ich mir ein eigenes UserScript geschrieben.

Um dieses UserScript verwenden zu können, ist allerdings für Safari ≥5.1 die Browser-Erweiterung TamperMonkey, bzw. für Safari <5.1 GreaseKit im Zusammenhang mit SIMBL notwendig.

Dieses UserScript setzt bei allen <video/>-Elementen auf der Seite autoplay=false und – sollten sie bereits losgelegt haben, bevor das Script loslegen konnte – pausiert diese.
Sollten die <video/>-Elemente eine ID haben, wird diese entfernt (sollte irgend ein Skript der Seite das Video z.B. beim Scrollen starten wollen, kann es dieses so nicht mehr im DOM finden), ebenso werden alle on-Events der <video/>-Elemente (z.B. onMouseover) entfernt.

Durch einen EventListener DOMContentLoaded versucht das UserScript außerdem, nachträglich geladene <video/>-Elemente (man kennt es ja: Man scrollt nach unten und auf einmal erweitert sich die Seite und schon wieder düdelt ein Video los) ebenso zu "kastrieren".

// ==UserScript==
// @name           Kein fucking autoplay
// @namespace      apfelz_no_autoplay
// @description    Schluss mit Autoplay
// @version        1.0
// @author         Apfel-Z
// @homepage       http://apfel-z.net
// @include        *
// @run-at         document-end
// ==/UserScript==

function handleDomChange(mutations) {
   if (mutations.length === 0) { removeAutoplay(); }
   }

function disableAutoplay() {
   var videos = document.getElementsByTagName('video');
   for (var i = videos.length - 1; i >= 0; i--) {
      var original = videos[i];
      original.autoplay = false;
      original.pause();
      for (var j = 0; j < original.attributes.length; j++) {
          var nodeName  = original.attributes.item(j).nodeName;
          if (nodeName.match(/^on/) || nodeName == "id")
             original.setAttribute(nodeName, "");
          }
      }        
   }


window.setTimeout(function() {
   disableAutoplay();
   window.addEventListener("DOMContentLoaded", function () {
      disableAutoplay();
      var observer = new MutationObserver(handleDomChange);
      observer.observe(document.body, { childList: true, subtree: true });
      });
   }, 200);  

Ich hatte noch eine aggressivere Version geschrieben. Hier werden sämtliche <video/>-Elemente in ein <novideo/>-Element umgewandelt, so dass der Browser die Elemente nicht mehr als Video erkennt.

Die Idee war, dass man diese Videos durch einen nachträglichen Klick darauf (analog zu "ClickToPlugin") bei Bedarf abspielen kann.
Allerdings haben einige Seiten die Videos so im DOM verwurschtelt, dass das mit dem "Anklicken und abspielen lassen" manchmal nicht mehr funktionierte und die einzige Möglichkeit, das Video doch sehen zu können, das Deaktivieren des UserScripts und das Neu-Laden der Seite war.

Wer jedoch Interesse an diesem Konzept hat...

// ==UserScript==
// @name           Kein fucking autoplay (Aggressiv)
// @namespace      apfelz_no_autoplay_aggressive
// @description    Schluss mit Autoplay
// @version        1.0a
// @author         Apfel-Z
// @homepage       http://apfel-z.net
// @include        *
// @run-at         document-end
// ==/UserScript==

function init() {
   GM_addStyle('novideo { background:#d3d3d3; cursor:pointer; }');
   }

function disableAutoplay() {
   var videos = document.getElementsByTagName('video');
   for (var i = videos.length - 1; i >= 0; i--) {
      var original = videos[i];
      var replacement = document.createElement('novideo');
      var info = document.createElement('div');
      for (var j = 0; j < original.attributes.length; j++) {
          var nodeName  = original.attributes.item(j).nodeName;
          var nodeValue = original.attributes.item(j).nodeValue;
          if (!nodeName.match(/^on/) && nodeName != "id")
             replacement.setAttribute(nodeName, nodeValue);
          }
      replacement.innerHTML = original.innerHTML;
      replacement.id = "apfelz_no_autoplay_dummy_"+i;
      original.parentNode.replaceChild(replacement, original);
      info.innerHTML = "<a href='#' reblock("+i+");>Geblocktes Video wieder herstellen</a>";
      }
   }

function handleDomChange(mutations) {
    if (mutations.length === 0) { removeAutoplay(); }
    }

window.setTimeout(function() {
   init();
   disableAutoplay();
   window.addEventListener("DOMContentLoaded", function () {
      disableAutoplay();
      var observer = new MutationObserver(handleDomChange);
      observer.observe(document.body, { childList: true, subtree: true });
      });
   }, 200);  
 
Google+

Name: E-Mail: 

Bitte beachten Sie: Kommentare werden erst vom Admin gelesen und auf Netiquette geprüft, bevor sie freigeschaltet und hier sichtbar werden.
Die Angabe der E-Mail-Adresse ist optional. Aus Spamschutzgründen und Ihrem eigenen Interesse wird die eingegebene E-Mail-Adresse an dieser Stelle nicht angezeigt, dient jedoch der Kontaktaufnahme des Admins mit dem Autor des Beitrages, sollten sich Fragen ergeben. Außerdem werden Sie, sofern Sie Ihre E-Mail-Adresse angegeben haben, automatisch benachrichtigt, wenn ihr Beitrag freigeschaltet oder von jemand anderem kommentiert wurde.
Beiträge, die Werbung/Spam, mangelnde deutsche Rechtschreibung (seien es auch nur eine Horde Ausrufezeichen hinter einem normalen Satz...ich hasse es), diskriminierende oder beleidigende Worte enthalten, werden nicht freigeschaltet.