2008-11-13 22 views
11

Chúng tôi có video trên YouTube trên trang web và muốn phát hiện xem có khả năng họ sẽ không thể xem video do chính sách công ty hay không.Phát hiện xem YouTube có bị chặn bởi công ty/ISP

Chúng tôi có hai trang web:

1) Flex/Flash 2) HTML

Tôi nghĩ rằng với Flex tôi có thể cố gắng để tải về http://youtube.com/crossdomain.xml và nếu nó là XML hợp lệ giả trang web là có sẵn

Nhưng với HTML tôi không biết làm thế nào để làm điều đó. Tôi thậm chí không thể nghĩ ra một 'hack tốt đẹp'.

Trả lời

14

Tôi thích giải pháp của người thiếu, nhưng có, nó tạo ra một race condition. này sẽ làm việc và sẽ không tạo ra một cuộc đua contition:

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"; 
+3

như với giải pháp của người thiếu, nếu trang chặn có một favicon điều này sẽ gây ra một dương tính giả. Bạn nên kiểm tra sự hiện diện của một cái gì đó khác biệt với youtube. –

+0

@Colin Pickard: Tốt. Có lẽ bạn nói đúng. Nhưng tôi đoán rằng nếu có trang chặn, nó sẽ sử dụng HTTP 404 (Không tìm thấy) hoặc Mã trạng thái lỗi khác, vì vậy tôi đoán nó sẽ không truy xuất được hình ảnh. Tôi đoán cách chính xác sẽ là làm một XMLHttpRequest và nhìn vào phản hồi, nhưng favicon dễ dàng hơn để mã và dễ dàng hơn, ví dụ, một trình duyệt điện thoại di động thực hiện nó –

+0

IE trong windows phone 8.1 luôn gọi hàm onerror. Có vẻ như trình duyệt không xem xét .ico dưới dạng định dạng hình ảnh hợp lệ! – smohadjer

8

Điều này sẽ hiệu quả. Về cơ bản, nó tải một tập tin javascript.com youtube, sau đó kiểm tra nếu một chức năng trong tập tin đó tồn tại.

<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> 
+0

Note, một cách tốt đẹp để kiểm tra điều này là thêm: 127.0.0.1 www.youtube.com tới máy của bạn nộp –

+0

gì? Tại sao 127.0.0.1/js/account.js tồn tại và có chức năng đó? – Karl

+2

@Karl: Đây là cách để kiểm tra trường hợp khi youtube bị * chặn *. Tất nhiên, trường hợp được bỏ cấm sẽ được kiểm tra bằng cách để lại dòng này khỏi máy chủ. –

14

Bạn có thể tải hình ảnh từ youtube bằng javascript và kiểm tra thuộc tính của nó. Các favicon là nhỏ và có một url phù hợp -

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 
} 

Tôi nghĩ rằng đây là tốt hơn một chút so với tải javascript vì điều này sẽ không cố gắng để chạy mã bất kỳ, và trong khi youtube có thể đổi tên file javascript của họ, hoặc các chức năng từ những các tập tin, họ không bao giờ có thể đổi tên favicon của họ.

+0

Tôi thích điều đó hơn giải pháp của riêng tôi –

+0

không phải là điều này để có một điều kiện chủng tộc? –

+0

ý tưởng gọn gàng, cảm ơn bạn đã chia sẻ. – mmattax

1

tôi đã bị mắc kẹt trên ngày hôm nay và cố gắng kiểm tra favicon nhưng nó wasnt làm việc trong IE. Tôi đã sử dụng YouTube Player API Reference for iframe Embeds để nhúng video youtube vào trang web của mình để những gì tôi đã làm là thực hiện kiểm tra trên trình phát var được xác định ngay trước onYouTubeIFrameReady với sự chậm trễ trong cuộc gọi javascript.

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

Dường như làm việc cho tôi. Tôi cần sự chậm trễ để làm cho nó hoạt động trong IE.

0

Điều này làm việc cho tôi ... Đây cũng là bài đăng đầu tiên của tôi, hy vọng nó cũng giúp ích cho bạn.

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

} 

?> 
+1

Đây không thực sự là câu trả lời cho câu hỏi - OP không sử dụng php. – Sculper

Các vấn đề liên quan