Dsgvo - youtube: Unterschied zwischen den Versionen

Aus Wikizone
Wechseln zu: Navigation, Suche
(Die Seite wurde neu angelegt: „Quelle: https://easyrechtssicher.de/youtube-videos-dsgvo-konform-einbinden/ (2018-07) Dennoch musst du nicht auf YouTube-Videos auf deinem Webprojekt verzicht…“)
 
 
Zeile 7: Zeile 7:
 
Erweitere deine Datenschutzerklärung um den Passus „Übrige Einbindung von Diensten und Inhalten Dritter“
 
Erweitere deine Datenschutzerklärung um den Passus „Übrige Einbindung von Diensten und Inhalten Dritter“
 
Wenn du ein YouTube-Video mit dem Code (der dir von YouTube bereitgestellt wird) einbindest, dann ändere das Attribut „src“ zu „data-src“. So verhinderst du, dass die Seite geladen wirst.
 
Wenn du ein YouTube-Video mit dem Code (der dir von YouTube bereitgestellt wird) einbindest, dann ändere das Attribut „src“ zu „data-src“. So verhinderst du, dass die Seite geladen wirst.
<iframe src=“https://www.youtube-nocookie.com/embed/kZTP5_SMqD8?rel=0&amp;showinfo=0“ width=“560″ height=“315″ frameborder=“0″ allowfullscreen=“allowfullscreen“></iframe>
+
<iframe src=“https://www.youtube-nocookie.com/embed/kZTP5_SMqD8?rel=0&amp;showinfo=0“ width=“560″ height=“315″ frameborder=“0″ allowfullscreen=“allowfullscreen“></iframe>
 
+
<iframe data-src=“https://www.youtube-nocookie.com/embed/kZTP5_SMqD8?rel=0&amp;showinfo=0“ width=“560″ height=“315″ frameborder=“0″ allowfullscreen=“allowfullscreen“></iframe>
<iframe data-src=“https://www.youtube-nocookie.com/embed/kZTP5_SMqD8?rel=0&amp;showinfo=0“ width=“560″ height=“315″ frameborder=“0″ allowfullscreen=“allowfullscreen“></iframe>
 
  
 
Jetzt musst du nur noch folgenden JavaScript-Cod einfügen. Dieser lädt das YouTube-Video, wenn der CookieConsent akzeptiert wurde.
 
Jetzt musst du nur noch folgenden JavaScript-Cod einfügen. Dieser lädt das YouTube-Video, wenn der CookieConsent akzeptiert wurde.
 
Im Footer (vorausgesetzt du nutzt Jquery. Sonst muss die Ansprache des Tags angepasst werden).
 
Im Footer (vorausgesetzt du nutzt Jquery. Sonst muss die Ansprache des Tags angepasst werden).
 +
 
<syntaxhighlight lang="javascript">
 
<syntaxhighlight lang="javascript">
 
<script>
 
<script>
Zeile 37: Zeile 37:
  
 
</script>
 
</script>
<syntaxhighlight>
+
</syntaxhighlight>
  
 
Im Grunde ist es eine Zwei-Klick Lösung. Das könnte sogar im Weitblick auf die EU-Privacy Richtline ab 2019 gut gelöst sein.
 
Im Grunde ist es eine Zwei-Klick Lösung. Das könnte sogar im Weitblick auf die EU-Privacy Richtline ab 2019 gut gelöst sein.
 +
 +
== Weitere Beispiele ==
 +
=== Klick Tipp ===
 +
Der Newsletterversender hat das so gelöst:
 +
 +
<syntaxhighlight lang="javascript">
 +
(function ($) {
 +
   
 +
    $(document).ready(function () {
 +
        getYoutubeAPI();
 +
   
 +
        $("[data-type='play-video']").click(function() {
 +
           
 +
            var src = $(this).data().videoSrc;
 +
            var attr = "enablejsapi=1&rel=0&showinfo=0&iv_load_policy=3&playsinline=1";
 +
           
 +
            if (src.indexOf('?') !== -1) {
 +
                src += '&'+attr;
 +
            }
 +
           
 +
            else {
 +
                src += '?'+attr;
 +
            }
 +
           
 +
            var id = makeid();
 +
           
 +
            var iframe = $("<iframe id='" + id + "' src='" + src + "' frameborder='0' ></iframe>");
 +
            $(this).next().replaceWith(iframe);
 +
           
 +
            $(this).hide();
 +
           
 +
            initPlayer(id)
 +
                .then(function (player) {
 +
                    addPlayEvent(player, iframe);
 +
                    // player.player.playVideo();
 +
                })
 +
                .catch(function (error) {
 +
                    console.log(error);
 +
                })
 +
        });
 +
   
 +
        let initPlayer = function (id) {
 +
            return new Promise (function(resolve, reject) {
 +
                let counter = 0;
 +
                let player;
 +
                let loading;
 +
           
 +
                let options = {
 +
                    iframeSelector: "#" + id,
 +
                    playbackControl: false
 +
                };
 +
           
 +
                if ((typeof YT !== 'undefined') && typeof YT.Player !== 'undefined') {
 +
                    player = new PlayerYT(options);
 +
                    resolve(player)
 +
                }
 +
                else {
 +
                    loading = setInterval(checkIframeAPILoaded, 250);
 +
                }
 +
           
 +
                function checkIframeAPILoaded() {
 +
                    if (typeof YT !== 'undefined' && YT.Player) {
 +
                        clearInterval(loading);
 +
                        player = new PlayerYT(options);
 +
                        resolve(player);
 +
                    }
 +
                    counter++;
 +
                }
 +
           
 +
                if (counter > 20) {
 +
                    reject(new Error("Request to youtube iframe api timed out"));
 +
                }
 +
            })
 +
        };
 +
   
 +
        let addPlayEvent = function (player, iframe) {
 +
           
 +
            player.onPlayerReadyCallbacks.push(function (event) {
 +
                event.target.playVideo();
 +
            });
 +
           
 +
        };
 +
   
 +
        function getYoutubeAPI() {
 +
            var tag = document.createElement('script');
 +
       
 +
            tag.src = "https://www.youtube.com/iframe_api";
 +
            var firstScriptTag = document.getElementsByTagName('script')[0];
 +
            firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);
 +
       
 +
            var tag3 = document.createElement('script');
 +
       
 +
            tag3.src = "/content_includes/js/libs/lodash.js";
 +
            var firstScriptTag3 = document.getElementsByTagName('script')[0];
 +
            firstScriptTag.parentNode.insertBefore(tag3, firstScriptTag3);
 +
       
 +
            var tag2 = document.createElement('script');
 +
       
 +
            tag2.src = "/content_includes/js/case_study/PlayerYT.js";
 +
            var firstScriptTag2 = document.getElementsByTagName('script')[0];
 +
            firstScriptTag.parentNode.insertBefore(tag2, firstScriptTag2);
 +
       
 +
        }
 +
   
 +
        function makeid() {
 +
            var text = "";
 +
            var possible = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
 +
       
 +
            for (var i = 0; i < 5; i++)
 +
                text += possible.charAt(Math.floor(Math.random() * possible.length));
 +
       
 +
            return text;
 +
        }
 +
    });
 +
   
 +
})(jQuery);
 +
</syntaxhighlight>
 +
 +
Im Quelltext legt er einen dicken Play Button über den Player. Ein Hinweis fehlt, aber das kann man natürlich anpassen.
 +
 +
<syntaxhighlight lang="html5">
 +
<div style='position: absolute;
 +
                        margin: auto;
 +
                        top: 0;
 +
                        left: 0;
 +
                        bottom: 0;
 +
                        right: 0;
 +
                        z-index: 10;
 +
                        width: 120px;
 +
                        height: 90px;
 +
                        background-image: url("/content_includes/img/webinar/ccp/youtube-play.png");
 +
                        background-position: top center;
 +
                        background-repeat: no-repeat;
 +
                        background-size: contain;
 +
                        cursor: pointer;
 +
                        -webkit-animation: button-grow 1s infinite;
 +
                        -moz-animation: button-grow 1s infinite;
 +
                        -o-animation: button-grow 1s infinite;
 +
                        animation: button-grow 1s infinite;
 +
                        -moz-transform: translate(-50%, -50%);
 +
                        -o-transform: translate(-50%, -50%);
 +
                        -ms-transform: translate(-50%, -50%);
 +
                        -webkit-transform: translate(-50%, -50%);
 +
                        transform: translate(-50%, -50%);' class='youtube-play on-hover' data-type='play-video' data-video-src='//www.youtube.com/embed/uIqD4Gvv3HY?rel=0'>
 +
  </div>
 +
  <img class='video-thumbnail' src='data:image/jpg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD... normaes bild geht sicher auch'/>
 +
</div>
 +
</syntaxhighlight>

Aktuelle Version vom 23. Januar 2020, 13:55 Uhr

Quelle: https://easyrechtssicher.de/youtube-videos-dsgvo-konform-einbinden/ (2018-07)

Dennoch musst du nicht auf YouTube-Videos auf deinem Webprojekt verzichten. Durch folgende Aktionen ist es relativ sicher.

Nutze bei der Einbettung immer die „NoCookie“-Option. Erweitere in deinem CookieConsent den Erklärungstext um „YouTube-Videos werden erst nach akzeptieren und neuladen der Seite angezeigt.“ Erweitere deine Datenschutzerklärung um den Passus „Übrige Einbindung von Diensten und Inhalten Dritter“ Wenn du ein YouTube-Video mit dem Code (der dir von YouTube bereitgestellt wird) einbindest, dann ändere das Attribut „src“ zu „data-src“. So verhinderst du, dass die Seite geladen wirst.

<iframe src=“https://www.youtube-nocookie.com/embed/kZTP5_SMqD8?rel=0&showinfo=0“ width=“560″ height=“315″ frameborder=“0″ allowfullscreen=“allowfullscreen“></iframe>
<iframe data-src=“https://www.youtube-nocookie.com/embed/kZTP5_SMqD8?rel=0&showinfo=0“ width=“560″ height=“315″ frameborder=“0″ allowfullscreen=“allowfullscreen“></iframe>

Jetzt musst du nur noch folgenden JavaScript-Cod einfügen. Dieser lädt das YouTube-Video, wenn der CookieConsent akzeptiert wurde. Im Footer (vorausgesetzt du nutzt Jquery. Sonst muss die Ansprache des Tags angepasst werden).

<script>

if(hasAcceptedCookieConsent()){
   var ytelement = .content iframe;
   var yturl = jQuery(ytelement).data(src);
   jQuery(ytelement).attr(src,yturl);
}

function hasAcceptedCookieConsent(){
   var hasCookie;
   var ca = document.cookie.split(;);
   hasCookie = false;
   for (var i=0; i<ca.length; i++) {
       single = ca[i].split(=);
       cookie_name = single[0].trim();
       if(cookie_name===cookieconsent_dismissed){
           hasCookie = true;
       }
   }
   return hasCookie;
}

</script>

Im Grunde ist es eine Zwei-Klick Lösung. Das könnte sogar im Weitblick auf die EU-Privacy Richtline ab 2019 gut gelöst sein.

Weitere Beispiele[Bearbeiten]

Klick Tipp[Bearbeiten]

Der Newsletterversender hat das so gelöst:

(function ($) {
    
    $(document).ready(function () {
        getYoutubeAPI();
    
        $("[data-type='play-video']").click(function() {
            
            var src = $(this).data().videoSrc;
            var attr = "enablejsapi=1&rel=0&showinfo=0&iv_load_policy=3&playsinline=1";
            
            if (src.indexOf('?') !== -1) {
                src += '&'+attr;
            }
            
            else {
                src += '?'+attr;
            }
            
            var id = makeid();
            
            var iframe = $("<iframe id='" + id + "' src='" + src + "' frameborder='0' ></iframe>");
            $(this).next().replaceWith(iframe);
            
            $(this).hide();
            
            initPlayer(id)
                .then(function (player) {
                    addPlayEvent(player, iframe);
                    // player.player.playVideo();
                })
                .catch(function (error) {
                    console.log(error);
                })
        });
    
        let initPlayer = function (id) {
            return new Promise (function(resolve, reject) {
                let counter = 0;
                let player;
                let loading;
            
                let options = {
                    iframeSelector: "#" + id,
                    playbackControl: false
                };
            
                if ((typeof YT !== 'undefined') && typeof YT.Player !== 'undefined') {
                    player = new PlayerYT(options);
                    resolve(player)
                }
                else {
                    loading = setInterval(checkIframeAPILoaded, 250);
                }
            
                function checkIframeAPILoaded() {
                    if (typeof YT !== 'undefined' && YT.Player) {
                        clearInterval(loading);
                        player = new PlayerYT(options);
                        resolve(player);
                    }
                    counter++;
                }
            
                if (counter > 20) {
                    reject(new Error("Request to youtube iframe api timed out"));
                }
            })
        };
    
        let addPlayEvent = function (player, iframe) {
            
            player.onPlayerReadyCallbacks.push(function (event) {
                event.target.playVideo();
            });
            
        };
    
        function getYoutubeAPI() {
            var tag = document.createElement('script');
        
            tag.src = "https://www.youtube.com/iframe_api";
            var firstScriptTag = document.getElementsByTagName('script')[0];
            firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);
        
            var tag3 = document.createElement('script');
        
            tag3.src = "/content_includes/js/libs/lodash.js";
            var firstScriptTag3 = document.getElementsByTagName('script')[0];
            firstScriptTag.parentNode.insertBefore(tag3, firstScriptTag3);
        
            var tag2 = document.createElement('script');
        
            tag2.src = "/content_includes/js/case_study/PlayerYT.js";
            var firstScriptTag2 = document.getElementsByTagName('script')[0];
            firstScriptTag.parentNode.insertBefore(tag2, firstScriptTag2);
        
        }
    
        function makeid() {
            var text = "";
            var possible = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
        
            for (var i = 0; i < 5; i++)
                text += possible.charAt(Math.floor(Math.random() * possible.length));
        
            return text;
        }
    });
    
})(jQuery);

Im Quelltext legt er einen dicken Play Button über den Player. Ein Hinweis fehlt, aber das kann man natürlich anpassen.

<div style='position: absolute;
                        margin: auto;
                        top: 0;
                        left: 0;
                        bottom: 0;
                        right: 0;
                        z-index: 10;
                        width: 120px;
                        height: 90px;
                        background-image: url("/content_includes/img/webinar/ccp/youtube-play.png");
                        background-position: top center;
                        background-repeat: no-repeat;
                        background-size: contain;
                        cursor: pointer;
                        -webkit-animation: button-grow 1s infinite;
                        -moz-animation: button-grow 1s infinite;
                        -o-animation: button-grow 1s infinite;
                        animation: button-grow 1s infinite;
                        -moz-transform: translate(-50%, -50%);
                        -o-transform: translate(-50%, -50%);
                        -ms-transform: translate(-50%, -50%);
                        -webkit-transform: translate(-50%, -50%);
                        transform: translate(-50%, -50%);' class='youtube-play on-hover' data-type='play-video' data-video-src='//www.youtube.com/embed/uIqD4Gvv3HY?rel=0'>
  </div>
  <img class='video-thumbnail' src='data:image/jpg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD... normaes bild geht sicher auch'/>
</div>