Internet Explorer Предупреждение при встраивании Youtube на сайт HTTPS? - PullRequest
9 голосов
/ 05 марта 2010

РЕДАКТИРОВАТЬ 22 марта 2011 г. : этот вопрос больше не актуален, поскольку Youtube теперь предлагает доступ HTTPS: http://apiblog.youtube.com/2011/02/https-support-for-youtube-embeds.html


Наше приложение работает по протоколу HTTPS, что редко создает нам какие-либо проблемы. Однако, когда дело доходит до youtube, тот факт, что они не представляют никакого контента через SSL-соединения, дает нам некоторую головную боль при попытке встроить клипы. Главным образом из-за Internet Explorers известное маленькое предупреждающее сообщение:

"Хотите просмотреть только веб-страницу контент, который был доставлен надежно? Эта страница содержит контент, который будет не будет доставлено с использованием безопасного HTTPS ... и т. д. "

Я пытался решить эту проблему несколькими способами. Наиболее перспективным было использование функциональности ProxyPass в Apache для сопоставления с YouTube.

Как это:

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

Это избавляет от надоедливого предупреждения. Однако SWF YouTube не может начать потоковую передачу. SWF, который мне удается загрузить в браузер, просто сообщает: «Произошла ошибка, повторите попытку позже».

Возможные решения:

  • Скачать youtube FLV: s и обслуживать их вне собственного домена (gah)
  • Использовать собственный FLV-проигрыватель и транслировать только FLV: s с youtube через https-прокси?

Обновление 10 марта : я пытался использовать Googles Youtube API для ActionScript для загрузки проигрывателя. Сначала это выглядело многообещающе, и я смог загрузить плеер через мой https: // прокси. Однако загружаемый SWF-файл содержит множество явных вызовов к различным URL-адресам, не относящимся к ssl, для создания ссылок аутентификации для FLV-потока и для загрузки различных политик междоменного доступа.

Похоже, мы не должны напрямую обращаться к flv-потокам. Из-за этого очень трудно обойти предупреждение Internet Explorer, если не считать извлечения FLV-файлов из YouTube и обслуживания их из собственного домена.

Существуют решения для скачивания youtubes FLV: s. Но это не соответствует условиям использования Youtube и на самом деле не подходит для нас.

Ответы [ 6 ]

7 голосов
/ 09 апреля 2010

Хорошо, наконец-то я нашел решение. И на самом деле это просто и восхитительно.

Используя комбинацию замечательного jQuery-плагина YouTubin , который может включать видео на YouTube через swfobject . Некоторая магия в swfobject.js просто решает это за нас.

Так что, если вы включите jquery , swfobject и jquery.youtubin , вы сможете делать это:

$.youtubin();

И все якорные ссылки, содержащие ссылки на YouTube-клипы, будут заменены встроенными проигрывателями YouTube.

В итоге решение приходит из замечательного проекта swfobject. Так или иначе, они просто исправляют это.

Вот доказательство :): http://screencast.com/t/YzVlZjkx

5 голосов
/ 14 февраля 2011

Хорошие новости - стандартные встраиваемые URL-адреса Youtube могут быть снабжены префиксом https вместо префикса http. В сочетании с swfobject это прекрасно работает.

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

5 голосов
/ 28 июля 2010

Вы можете использовать swfobject, что действительно все, что делает youtubin.

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

3 голосов
/ 17 ноября 2010

Просто используйте 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>

И в любом случае вы не хотите, чтобы ваш пользователь узнал идентификатор видео, вы можете просто сделать что-то подобное в 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

2 голосов
/ 22 марта 2011

Я знаю, что это старое, но я работал через BS, которая является Google плохой YouTube Cert и проблемы с воспроизведением 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();
}
1 голос
/ 12 сентября 2011

мы только что столкнулись с такой проблемой, когда IE7 выдавал ошибку смешанного медиа с видео YT, встроенным по SSL Правда в том, что их родной плеер через https вообще не является SSL. Если вы посмотрите на ресурсы, используемые страницей, когда вызывается модуль, он вызывает файлы со статического сервера через HTTP. Их сценарии обнаружения для версий Flash и JavaScript также вызывают с HTTP-адреса.

IE выдаст ошибку на основе этой информации.

Но это очень легко исправить! Используйте API YouTube Chromeless. Этот проигрыватель не вызывает никаких дополнительных файлов для работы, это чисто готовое решение по этому вопросу. Это гораздо более надежный игрок, и он дает вам гораздо больший контроль над игроками со стороны внешних элементов.

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

...