Youtube動画をASP.NETのAJAX Control Toolkit の Balloon Popup に埋め込む

ASP.NETのコントロール Literal に、Youtube動画の埋め込みコードを設定し、マウスオーバーで Control Toolkit の Balloon Popup でポップアップする。なお、YoutubeのURLはTMDbから取得し、DBに登録済。

youTubeEmbeddedPlayer.dll で実現していたけど、Youtubeの仕様変更か?IEの仕様変更か?または他の理由か?わからないが、ポップアップ内で再生するのに、一度フルスクリーンにし、フルスクリーンを解除しなければならなくなった。

 

テスト

そこで、他の方法を考えることにした。方法は以下の3つを考えた。

  • IFRAMEで表示
    正しく表示され、ポップアップ内で再生可能。ただし、VisualStudioのデバッグでマウスアウトすると、スクリプトエラーを起こす。
  • youTubeEmbeddedPlayer.dll を利用する
    一度フルスクリーンにし、フルスクリーンを解除する必要がある。
  • OBJECTで埋め込む
    再生できない。フルスクリーンにもできない。

よってIFRAMEのコードを Literal に埋め込むすることにした。

Youtubeコード埋め込みの方式確認
Dim objLiteralDataListTrailersDBYouTube As Object = item.FindControl("LiteralDataListTrailersDBYouTube")
Dim objsourceLabel As Object = item.FindControl("YouTubeLabel")
If Not objLiteralDataListTrailersDBYouTube Is Nothing Then
    If Not objsourceLabel Is Nothing Then
        If objsourceLabel.text <> "" Then
            objLiteralDataListTrailersDBYouTube.Text = "<iframe width=""400"" height=""225"" src=""//www.youtube.com/embed/" + objsourceLabel.text + """" + " frameborder=""0"" allowfullscreen></iframe>"
            objLiteralDataListTrailersDBYouTube.Text = YouTubeScript.Get(objsourceLabel.text, auto:=False, W:=400, H:=225)
            objLiteralDataListTrailersDBYouTube.Text = "<object width=""400"" height=""225""><param name=""movie"" value=""https://www.youtube.com/v/" + objsourceLabel.text + "?version=3&autoplay=0""></param><param name=""allowScriptAccess"" value=""always""></param>" + "<embed src=""https://www.youtube.com/v/" + objsourceLabel.text + "?version=3&autoplay=0" + """" + " Type=""application/x-shockwave-flash""" + " allowscriptaccess=""always""" + " width=""400"" height=""225""></embed>" + "</object>"
        End If
    End If
End If

 

実装

Youtube動画はいくつかの画面でポップアップしているのでクラスとして登録する。

ClassMJB.vb
Public Function iframeYoutube(ByVal YotubeURL As String, ByVal Width As String, ByVal Height As String) As String

    Dim retYoutube As String
    retYoutube = "<iframe width=" + """" + Width + """" + " height=" + """" + Height + """" + " src=""//www.youtube.com/embed/" + YotubeURL + """" + " frameborder=""0"" allowfullscreen></iframe>"
    Return retYoutube

End Function
LiteralへYoutube動画URLを埋め込み
Dim objLiteralDataListTrailersDBYouTube As Object = item.FindControl("LiteralDataListTrailersDBYouTube")
Dim objsourceLabel As Object = item.FindControl("YouTubeLabel")
If Not objLiteralDataListTrailersDBYouTube Is Nothing Then
    If Not objsourceLabel Is Nothing Then
        If objsourceLabel.text <> "" Then
            objLiteralDataListTrailersDBYouTube.Text = ClassMJB.iframeYoutube(objsourceLabel.text, "400", "225")
        End If
    End If
End If


YouTube 埋め込みプレーヤーとプレーヤーのパラメータ - YouTube — Google Developers
https://developers.google.com/youtube/player_parameters?hl=ja

 

実際の動き

1ページフルにあるところはちょっと重い。

ASP.NETでYoutube動画をポップアップに埋め込む

 

サンプル

上は固定サイズで表示、中央はテキストボックスに入れた Youtube Video ID とテキストボックスに入れた縦横サイズで表示、下は Youtube Popup をクリックで固定サイズをポップアップ内に表示。
01

youtube.aspx
<%@ Page Language="VB" AutoEventWireup="false" CodeFile="youtube.aspx.vb" Inherits="youtube" %>

<%@ Register assembly="AjaxControlToolkit" namespace="AjaxControlToolkit" tagprefix="asp" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
    
        <asp:ToolkitScriptManager ID="ToolkitScriptManager1" runat="server">
        </asp:ToolkitScriptManager>
    
        <asp:Literal ID="Literal1" runat="server"></asp:Literal>
        <br />
        <br />
        Youtube URL<asp:TextBox ID="TextBoxURL" runat="server"></asp:TextBox>
        W<asp:TextBox ID="TextBoxWidth" runat="server" Columns="3"></asp:TextBox>
        H<asp:TextBox ID="TextBoxHeight" runat="server" Columns="3"></asp:TextBox>
        <asp:Button ID="Button1" runat="server" Text="" />
        <br />
        <asp:Literal ID="Literal2" runat="server"></asp:Literal>
    
        <br />
        <br />
        <br />
        <br />
        <br />
        <br />
        <br />
        <br />
        <br />
        <br />
        <br />
        <br />
        <br />
        <br />
        <br />
        <asp:Label ID="Label1" runat="server" Text="Youtube Popup"></asp:Label>
        <asp:BalloonPopupExtender ID="Label1_BalloonPopupExtender" runat="server" BalloonPopupControlID="PanelYoutubePopup" BalloonSize="Large" CustomCssUrl="" Enabled="True" ExtenderControlID="" TargetControlID="Label1">
        </asp:BalloonPopupExtender>
        <asp:Panel ID="PanelYoutubePopup" runat="server">
            <asp:Literal ID="Literal3" runat="server"></asp:Literal>
        </asp:Panel>
    
    </div>
    </form>
</body>
</html>

youtube.aspx.vb
Partial Class youtube
    Inherits System.Web.UI.Page

    Protected Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load

        Literal1.Text = "<iframe width=""560"" height=""315"" src=""//www.youtube.com/embed/9i_WCKR8FrE"" frameborder=""0"" allowfullscreen></iframe>"

        Literal2.Text = "<iframe width=" + """" + TextBoxWidth.Text + """" + " height=" + """" + TextBoxHeight.Text _
                        + """" + " src=""//www.youtube.com/embed/" + TextBoxURL.Text + """" _
                        + " frameborder=""0"" allowfullscreen></iframe>"

        Literal3.Text = "<iframe width=""400"" height=""210"" src=""//www.youtube.com/embed/9i_WCKR8FrE"" frameborder=""0"" allowfullscreen></iframe>"

    End Sub

End Class

コメント

このブログの人気の投稿

ダブルクォーテーションで括られたCSVカ​ンマ区切りテキストファイルを SQL Server で Bulk Insert する方法

PowerShellでTSV/CSVの列を絞り込んで抽出し、(先頭/行末)からN行出力する

IKEAの鏡を壁に取り付ける