2010-03-05 37 views
9

编辑2011年3月22:这个问题已经不再是相关的,因为YouTube现在提供HTTPS访问:http://apiblog.youtube.com/2011/02/https-support-for-youtube-embeds.html在HTTPS网站上嵌入Youtube时的Internet Explorer警告?


我们的应用程序运行在HTTPS而很少出现任何问题我们。但是,当涉及到YouTube时,他们没有通过SSL连接呈现任何内容的事实是在尝试嵌入剪辑时给我们一些头痛。这主要是因为互联网探索者有名的警告消息:

“你想只查看安全传送的网页内容 此 页面包含将 不使用安全的HTTPS 交付内容.. 。“等”

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

像这样:

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

这摆脱了恼人的警告。但是,YouTube SWF未能开始流式传输我设法加载到浏览器中的SWF只是声明:“发生错误,请稍后再试。”

潜在的解决方案也许是:

  • 下载YouTube FLV:S和为他们服务了自己的域名(GAH)
  • 使用自定义FLV播放器和流只有FLV:通过HTTPS代理从YouTube小号?

更新3月10日:我试图用Googles Youtube API for ActionScript加载的球员。它看起来很有希望,我可以通过我的https://代理加载一个玩家。但是,加载的SWF包含对不同非SSL URL的显式调用的负载,以为FLV流创建认证链接并加载不同的跨域策略。

看起来好像我们不应该直接访问flv-streams。这使得绕过Internet Explorer警告非常困难,因为很难将YouTube上的FLV从YouTube上分离出来,并将它们从您自己的域中提供出来。

这里有解决方案用于下载youtubes FLV:s。但这不符合YouTube的使用条款,对我们来说真的不是一种选择。

+0

我变得一点点希望,当一个同事放倒我,她是看在谷歌Wave在Internet Explorer中的YouTube视频通过HTTPS!但后来我意识到,因为您需要在IE中安装Chrome Frame Plugin才能运行Wave。所以它实际上是Chrome运行而不是Internet Explorer。 – 2010-03-08 10:10:26

+0

您是否考虑过导航到HTTP页面来加载嵌入式SWF? – 2010-03-10 17:51:59

+0

打开一个新页面并不是一个真正的选择 - 用户体验明智的背景和焦点将会丢失。如果我只对没有IE警告感兴趣,我们会做这样简单的事情,实际上也许我们会被迫做。这个问题都是关于在不损害用户体验的情况下避免警告。 – 2010-03-10 22:10:22

回答

5

您可以使用SWFObject的,这是真正意义youtubin在做什么。

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

+0

确实。这实际上比我自己的答案要好。感谢澄清。 – 2010-08-25 08:40:23

7

好吧,最后我遇到了一个解决方案。实际上它简单而令人愉快。

使用美妙的jQuery plugin YouTubin的组合,它可以通过swfobject选择包含youtube视频。 swfobject.js中的一些魔术只是为我们解决了这个问题。

所以只要你有jqueryswfobjectjquery.youtubin,你将能够做到这一点:

$.youtubin(); 

和含有链接到YouTube剪辑的所有锚链接将与嵌入式YouTube播放器所取代。

最后,解决方案来自美妙的swfobject项目。不知何故,他们只是解决这个问题。

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

+0

这不适合我。 IE 8只显示了一个文本链接,视频应该已经嵌入。我还在Chrome中收到安全警告。 – Adam 2011-02-04 20:43:37

+0

IE8只显示一个文本链接,好像你有错误地实现了$ youtubin或其中的错误。答案仍然存在于swfobject中,并且不会出现可怕的IE8警告弹出窗口。其他不太明显的警告是好的我认为,我们实际上正在获取不安全的数据,所以用户应该有一种方法来了解这一点。我想摆脱IE8弹出窗口,就是这样。 – 2011-02-07 09:58:36

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

5

好消息 - 标准的Youtube嵌入网址可以提供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);

+0

是的。这太棒了。不需要swfobject,那么对吗? – 2011-02-15 06:04:05

2

我知道这是旧的,但我通过BS工作,这是谷歌不良的YouTube证书和IE7播放问题。

您必须嵌入AS3播放器。我SwfObject的做到了,因为我neede控制电影等。

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(); 
} 
1

我们只是碰到这种性质与IE7扔混合媒体错误嵌入通过SSL YT影片的问题就来了。事实是,通过https的本地播放器完全不是SSL。如果您在调用该单元时查看页面使用的资源,它将通过HTTP从静态服务器调用文件。它们的Flash版本和JavaScript版本的检测脚本也从HTTP地址进行调用。

IE将根据此信息引发错误。

但有一个非常简单的修复!使用YouTube Chromeless API。该播放器不会调用任何额外的文件进行操作,它是一个纯粹随时可用的解决方案。这是一个更可靠的球员,它可以让你从外部元素控制更多的球员。

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

+0

谢谢!很好,有关于此的一些更新信息。 – 2011-09-12 20:55:40

相关问题