I\'m trying to understand how to target an existing iframe using the YouTube API (i.e. without constructing an iframe with the script).
As usual, Google does not giv
YT_ready, getFrameID and onYouTubePlayerAPIReady are functions as defined in this answer. Both methods can be implemented without any preloaded library. In my previous answer, I showed a method to implement the feature for a single frame.
In this answer, I focus on multiple frames.
HTML example code (important tags and attributes are capitalized, ):
   
  
   
  
JavaScript code (YT_ready, getFrameID, onYouTubePlayerAPIReady and the YouTube Frame API script loader are defined here)
var players = {}; //Define a player storage object, to expose methods,
                  //  without having to create a new class instance again.
YT_ready(function() {
    $(".thumb + iframe[id]").each(function() {
        var identifier = this.id;
        var frameID = getFrameID(identifier);
        if (frameID) { //If the frame exists
            players[frameID] = new YT.Player(frameID, {
                events: {
                    "onReady": createYTEvent(frameID, identifier)
                }
            });
        }
    });
});
// Returns a function to enable multiple events
function createYTEvent(frameID, identifier) {
    return function (event) {
        var player = players[frameID]; // Set player reference
        var the_div = $('#'+identifier).parent();
        the_div.children('.thumb').click(function() {
            var $this = $(this);
            $this.fadeOut().next().addClass('play');
            if ($this.next().hasClass('play')) {
                player.playVideo();
            }
        });
    }
}
In my previous answer, I bound the onStateChange event. In this example, I used the onReady event, because you want to call the functions only once, at initialization.
This example works as follows:
The following methods are defined in this answer.
onYoutubePlayerAPIReady is called, which in his turn activates all functions as defined using YT_readyThe declaration of the following methods are shown here, but implemented using this answer. Explanation based on the example:
<.. class="thumb">.id is retrieved, and stored in the identifier variable.getFrameID. This ensures that the identifier, because I have already attached an ID to the players object, accessible by key frameID.onReady* event is defined. This method will be invoked when the API is fully initialized for the frame.createYTEvent
This method returns a dynamically created function, which adds functionality for separate players. The most relevant parts of the code are:
function createYTEvent(frameID, identifier) {
    return function (event) {
        var player = players[frameID]; // Set player reference
        ...
                player.playVideo();
    }
}
frameID is the ID of the frame, used to enable the YouTube Frame API.identifier is the ID as defined in YT_ready, not necessarily an getFrameID will attempt to find the closest matching frame for a given id. That is, it returns the ID of a given -frame.Other YouTube Frame API answers. In these answers, I showed various implementations of the YouTube Frame/JavaScript API.