15

我们在一个网站上有 YouTube 视频,并希望检测他们是否可能由于(很可能)公司政策或其他原因而无法观看这些视频。

我们有两个站点:

1) Flex / Flash 2) HTML

我认为使用 Flex 我可以尝试下载http://youtube.com/crossdomain.xml,如果它是有效的 XML,则假设该站点可用

但是对于 HTML,我不知道该怎么做。我什至想不出一个“不错的黑客”。

4

5 回答 5

21

我喜欢缺乏者的解决方案,但是是的,它创造了一个竞争条件。这将起作用并且不会创建比赛条件:

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";
于 2009-11-26T16:29:11.340 回答
14

您可以使用 javascript 从 youtube 加载图像并检查其属性。favicon 很小并且具有一致的 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。

于 2008-11-13T02:10:30.050 回答
8

这应该有效。基本上,它会加载一个 youtube.com javascript 文件,然后检查该文件中的函数是否存在。

<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>
于 2008-11-13T02:02:28.710 回答
1

我今天被困在这个问题上并尝试了 favicon 测试,但它在 IE 中不起作用。我正在使用YouTube Player API Reference for iframe Embeds将 youtube 视频嵌入到我的网站中,所以我所做的是对在 onYouTubeIFrameReady 之前定义的播放器变量进行检查,并延迟 javascript 调用。

<script> function YouTubeTester() {            
            if (player == undefined) {
                alert("youtube blocked");
            }
        }
</script>
<script>window.setTimeout("YouTubeTester()", 500);</script>

似乎对我有用。我需要延迟让它在 IE 中工作。

于 2013-11-11T18:21:49.010 回答
0

这对我有用......这也是我的第一篇文章,希望它也能帮助一些人。

<?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";

}

?>
于 2015-08-19T15:29:07.380 回答