Обнаружение, если YouTube заблокирован компанией / провайдером
У нас есть видео с YouTube на сайте, и мы хотим выяснить, возможно ли, что они не смогут их просматривать из-за (в основном, из-за) политики компании или иным образом.
У нас есть два сайта:
1) Flex / Flash 2) HTML
Я думаю, что с помощью Flex я могу попытаться загрузить http://youtube.com/crossdomain.xml и, если это действительный XML, предположить, что сайт доступен
Но с HTML я не знаю, как это сделать. Я даже не могу думать о "хорошем взломе".
5 ответов
Мне нравится решение неудачника, но да, оно создает условия гонки. Это сработает и не создаст условия гонки:
var image = new Image();
image.onload = function(){
// The user can access youtube
};
image.onerror = function(){
// The user can't access youtube
};
image.src = "http://youtube.com/favicon.ico";
Вы можете загрузить изображение с YouTube, используя JavaScript и проверить его свойства. Фавикон крошечный и имеет постоянный URL -
var image = new Image();
image.src = "http://youtube.com/favicon.ico";
if (image.height > 0) {
// The user can access youtube
} else {
// The user can't access youtube
}
Я думаю, что это немного лучше, чем загрузка javascript, потому что он не будет пытаться запускать какой-либо код, и хотя youtube может переименовать свои файлы javascript или функции из этих файлов, они вряд ли когда-либо переименуют свой favicon.
Это должно работать. Обычно он загружает файл JavaScript youtube.com, а затем проверяет, существует ли функция в этом файле.
<html>
<head>
<script src="http://www.youtube.com/js/account.js"></script>
<script>
function has_you_tube()
{
if(typeof addVideosToQuicklist == 'function')
{
return true;
}
else
{
return false;
}
}
</script>
</head>
<body>
<script>alert( "has_youtube: " + has_you_tube() ); </script>
</body>
</html>
Я застрял на этом сегодня и попробовал тест favicon, но он не работал в IE. Я использовал Справочник по API проигрывателя YouTube для iframe Embeds для встраивания видео YouTube на свой сайт, поэтому я выполнил проверку проигрывателя var, определенного непосредственно перед onYouTubeIFrameReady, с задержкой вызова javascript.
<script> function YouTubeTester() {
if (player == undefined) {
alert("youtube blocked");
}
}
</script>
<script>window.setTimeout("YouTubeTester()", 500);</script>
Кажется, работает на меня. Мне нужна была задержка, чтобы заставить его работать в IE.
Это сработало для меня... Это также мой первый пост, надеюсь, это поможет кому-то тоже.
<?php
$v = file_get_contents("https://www.youtube.com/iframe_api");
//Tie counts to a variable
$test = substr_count($v, 'loading');
if ($test > 0)
{ ?>
<iframe>YOUTUBE VIDEO GOES HERE</iframe>
<?php
}
else
{
echo "<br/> no connection";
}
?>