Dsgvo - youtube: Unterschied zwischen den Versionen
(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&showinfo=0“ width=“560″ height=“315″ frameborder=“0″ allowfullscreen=“allowfullscreen“></iframe> | + | <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> | |
| − | <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. | 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>