2

Ich schreibe eine Chrome-Erweiterung und möchte feststellen, wann ein Video startet/endet, während ein Nutzer YouTube-Videos ansieht. Der Unterschied zwischen meiner Situation und anderen Tutorials, die ich gelesen habe, ist, dass ich nicht mein eigenes Youtube-Video auf meiner eigenen Website einbinde. Ich möchte nur Ereignisse aus dem Video erkennen, die der Nutzer auf youtube sieht.Ermitteln von YouTube-Videoereignissen mit dem Skript für die Erweiterung der Chrome-Erweiterung

Gerade jetzt meine manifest.json Datei hat die folgenden Zeilen für Content-Skripte:

"content_scripts": [ 
    { 
     "matches": ["http://*/*","https://*/*"], 
     "js": ["js/jquery.js", "js/iframe_api.js", "js/contentScript.js"], 
     "all_frames": true 
    } 
], 

Ich habe ist jquery heruntergeladen und iframe_api.js der Inhalt https://www.youtube.com/iframe_api. Meine contentScript.js Datei ist sehr einfach, ich will nur etwas an die Konsole drucken, wenn das Video ist fertig:

function onYouTubeIframeAPIReady() { 
    var player; 
    player = new YT.Player('ytplayer', { 
     events: { 
      'onReady': onPlayerReady, 
     } 
    }); 
} 

function onPlayerReady(event) { 
    console.log('It worked!'); 
} 

mir jemand helfen könnte? Kann ein Inhaltsskript dies auch tun, oder kann ich nicht auf den Iframe eines Youtube-Videos zugreifen, weil es sich nicht in der "isolierten Umgebung" befindet, in der Inhaltsskripte leben?

+0

Inhaltsskripts können nur auf DOM zugreifen. Sie können nicht auf den JavaScript-Kontext zugreifen, können jedoch Listener an Dom-Knoten anhängen. – chrmod

+0

@chrmod Das macht Sinn. Ich war mir nicht sicher, ob der Youtube-Iframe als Teil des Doms angesehen wurde oder nicht, aber bei näherer Betrachtung scheint er dynamisch über JavaScript geladen zu werden. Daher macht es Sinn, dass das Inhaltsskript nicht darauf zugreifen konnte. Ich habe selbst eine alternative Lösung gefunden, siehe meine Antwort unten. – GabeMeister

Antwort

2

Kurz nachdem ich diese Frage gepostet habe, habe ich eine Antwort gefunden. Nicht die Youtube-Iframe-API, sondern die HTML5-API. Ich habe das Inhaltsskript wie folgt geändert, um eine Nachricht zu drucken, wenn das Video endet und es funktioniert.

var vid = $('video').get(0); 

vid.addEventListener('ended', function(e) { 
    console.log('The video ended!'); 
}); 
+0

Könnten Sie auf "Nicht mit dem Youtube iframe api, sondern eher die html5 api?" Woher genau bekommst du das letztere? Wo ist es platziert? – lightningleaf