在HTTP站点上嵌入Youtube时出现Internet Explorer警告?

时间:2010-03-05 16:39:22

标签: internet-explorer ssl https youtube flvplayback

编辑2011年3月22日:由于Youtube现在提供HTTPS访问权限,因此问题不再相关:http://apiblog.youtube.com/2011/02/https-support-for-youtube-embeds.html


我们的应用程序通过HTTPS运行,很少给我们带来任何问题。然而,当谈到youtube时,他们没有通过SSL连接呈现任何内容这一事实让我们在尝试嵌入剪辑时感到头疼。主要是因为Internet Explorers着名的小警告信息:

  

“您是否只想查看网页?   安全传送的内容?   此页面包含将要的内容   不使用安全的HTTPS提供   ......等“

我试图通过几种方式解决这个问题。最有希望的是使用Apache中的ProxyPass功能映射到YouTube。

像这样:

ProxyPass: /youtube/ http://www.youtube.com
ProxyPassReverse: /youtube/ http://www.youtube.com

这摆脱了恼人的警告。但是,youtube SWF无法启动流式传输我设法加载到浏览器中的SWF只是说:“发生错误,请稍后再试”。

可能的解决方案可能是:

  • 下载youtube FLV:s并使用自己的域名(gah)
  • 提供服务
  • 使用自定义FLV播放器,只通过https代理从youtube流式传输FLV:?

3月10日更新:我尝试使用Googles Youtube API for ActionScript加载播放器。它起初看起来很有希望,我能够通过我的https://代理加载播放器。但是,加载的SWF包含对不同非ssl URL的显式调用的大量内容,以便为FLV流创建身份验证链接以及加载不同的跨域策略。

我们似乎不应该直接访问flv-streams。这使得很难绕过Internet Explorer警告,而不是从youtube中删除FLV:s并将其提供给您自己的域。

有解决方案可以下载你的FLV:s。但这不符合Youtube的使用条款,对我们来说真的不是一个选择。

6 个答案:

答案 0 :(得分:7)

好的,最后我发现了一个解决方案。实际上它很简单,令人愉快。

使用精彩jQuery plugin YouTubin的组合,可以选择通过swfobject添加YouTube视频。 swfobject.js中的一些魔法只是为我们解决了这个问题。

只要您加入jqueryswfobjectjquery.youtubin,您就可以执行此操作:

$.youtubin();

所有包含youtube-clips链接的锚链接都将被嵌入式youtube播放器取代。

最终解决方案来自精彩的swfobject项目。不知何故,他们只是解决了这个问题。

这是证明:):http://screencast.com/t/YzVlZjkx

答案 1 :(得分:5)

你可以使用swfobject,这实际上就是你所做的一切。

http://code.google.com/p/swfobject/

答案 2 :(得分:5)

好消息 - Youtube的标准嵌入URL可以提供https前缀而不是http前缀。与swfobject结合使用,效果很好。

swfobject.embedSWF(“https://www.youtube.com/v/Zm80UedfaxA&enablejsapi=1&playerapiid=hpatientplayer”,“patientplayer”,“586”,“351”,“9.0.0”,“ custom / expressInstall.swf“,null,params,atts);

答案 3 :(得分:3)

只需使用SWFOBJECT ...即可解决我的问题

<script type="text/javascript" src="js/swfobject.js"></script>

<div id="quibskiplayer"></div>

<script type="text/javascript">
// All of the magic handled by SWFObject (http://code.google.com/p/swfobject/)

var videoID = "";  // REPLACE VIDEO IT HERE
var divID = "quibskiplayer";  //PLACE ID OF DIV TO BE REPLACED HERE 
var params = { allowScriptAccess: "always" };
var atts = { id: "myytplayer" };

swfobject.embedSWF("http://www.youtube.com/v/" + videoID + "&enablejsapi=1&playerapiid=player1",  divID, "325", "225", "8", null, null, params, atts);

</script>

在任何情况下,您都不希望您的用户找到视频ID,您可以在PHP中执行以下操作:

$src = $row['youtube_embedd']; // $src is the entire Embedd code
$regex_pattern = '/youtube\.com\/(v\/|watch\?v=)([\w\-]+)/';
preg_match($regex_pattern,$src,$output);
$videoID = $output[2];

TECHFORGE ONLINE

答案 4 :(得分:2)

我知道这已经过时了,但我通过了Google的YouTube YouTube认证和IE7播放问题。

你必须嵌入AS3播放器。我用swfObject做了,因为我需要控制电影等等。

enter code here
var params = {allowScriptAccess:"always",wmode:"transparent"};
var atts1 = {id:"myytplayer1"};
var atts2 = {id:"myytplayer2"};
var atts3 = {id:"myytplayer3"};         
swfobject.embedSWF("https://www.youtube.com/v/xxxxx?version=3&autohide=1&controls=0&enablejsapi=1&fs=1&rel=0&iv_load_policy=3&feature=player_embeded&playerapiid=ytplayer1","video1R", "260", "150", "8", null, null, params, atts1);  
swfobject.embedSWF("https://www.youtube.com/v/xxxxx?version=3&autohide=1&controls=0&enablejsapi=1&fs=1&rel=0&iv_load_policy=3&feature=player_embeded&playerapiid=ytplayer2","video2R", "260", "150", "8", null, null, params, atts2);
swfobject.embedSWF("https://www.youtube.com/v/xxxxx?version=3&autohide=1&controls=0&enablejsapi=1&fs=1&rel=0&iv_load_policy=3&feature=player_embeded&playerapiid=ytplayer3","video3R", "260", "150", "8", null, null, params, atts3);    

function onYouTubePlayerReady(playerId) {
 ytplayer1 = document.getElementById("myytplayer1");
 ytplayer2 = document.getElementById("myytplayer2");
 ytplayer3 = document.getElementById("myytplayer3");
}

function pauseYTVideo(divId){
   if (divId.substr(5,1) == 1) ytplayer1.pauseVideo();
   if (divId.substr(5,1) == 2) ytplayer2.pauseVideo();
   if (divId.substr(5,1) == 3) ytplayer3.pauseVideo();
}

答案 5 :(得分:1)

我们刚刚遇到了这种性质的问题,IE7通过SSL嵌入的YT视频引发混合媒体错误。事实是,他们在https上的原生播放器根本不是SSL。如果在调用单元时查看页面使用的资源,它会通过HTTP从静态服务器调用文件。他们的Flash版本和JavaScript版本的检测脚本也可以从HTTP地址调用。

IE将根据此信息抛出错误。

但是有一个非常简单的解决方法!使用YouTube Chromeless API。该播放器不会调用任何其他文件进行操作,它是一个纯粹的即用型解决方案。这是一个更可靠的玩家,它可以让你更好地控制外部元素。

http://code.google.com/apis/youtube/youtube_player_demo.html