2008-11-13 3 views
11

Wir haben YouTube-Videos auf einer Website und möchten feststellen, ob es wahrscheinlich ist, dass sie aufgrund von (meist wahrscheinlichen) Unternehmensrichtlinien oder aus anderen Gründen nicht angezeigt werden können.Erkennen, ob YouTube vom Unternehmen/ISP blockiert wird

Wir haben zwei Seiten:

1) Flex/Flash 2) HTML

ich mit Flex denken kann ich http://youtube.com/crossdomain.xml zum Download versuchen, und wenn es gültige XML annehmen ist die Website verfügbar ist

Aber mit HTML weiß ich nicht, wie es geht. Ich kann nicht einmal an einen "netten Hack" denken.

Antwort

14

Ich mag Lacker Lösung, aber ja, es schafft eine race condition. Dies funktioniert und wird kein Rennen contition erstellen:

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

Wie bei der Lösung von lafer, wenn die Blockierungsseite ein Favicon hat, wird dies einen falschen positiven Wert verursachen. Sie sollten nach etwas suchen, das für youtube eindeutig ist. –

+0

@Colin Pickard: Guter Punkt. Vielleicht hast du Recht. Aber ich denke, wenn es eine blockierende Seite gibt, würde es einen HTTP 404 (Not Found) oder anderen Fehlerstatuscode verwenden, also denke ich, es wird das Bild nicht abrufen können. Ich denke, der richtige Weg wäre, eine XMLHttpRequest zu tun und auf die Antwort zu sehen, aber das Favicon ist einfacher zu codieren und einfacher, dass zum Beispiel ein Handy-Browser es implementiert –

+0

IE in Windows Phone 8.1 ruft immer die Onerror-Funktion. Es scheint, dass der Browser .ico nicht als gültiges Bildformat betrachtet! – smohadjer

8

Dies sollte funktionieren. Im Grunde lädt es eine youtube.com JavaScript-Datei und überprüft dann, ob eine Funktion in dieser Datei existiert.

+0

Hinweis, eine schöne Möglichkeit, dies zu testen, ist hinzuzufügen: 127.0.0.1 www.youtube.com auf Ihre Hosts-Datei –

+0

Was? Warum sollte 127.0.0.1/js/account.js existieren und diese Funktion haben? – Karl

+2

@Karl: Dies ist eine Möglichkeit, den Fall zu testen, wenn youtube * blockiert * ist. Natürlich würde der entsperrte Fall getestet werden, indem diese Leitung aus Hosts herausgelassen wird. –

14

Sie können ein Bild von youtube laden mit Javascript und überprüfen Sie seine Eigenschaften. Das Favicon ist klein und hat eine konsistente 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 
} 

Ich denke, das ist etwas besser als Javascript geladen, weil diese nicht versuchen, beliebigen Code auszuführen, und während youtube könnten ihre Javascript-Dateien umbenennen oder Funktionen von denen Dateien, werden sie ihr Favicon wahrscheinlich nie umbenennen.

+0

Ich mag das besser als meine eigene Lösung –

+0

ist das nicht, um eine Race Condition zu haben? –

+0

nette idee, danke fürs teilen. – mmattax

1

ich auf diesem heute stecken geblieben und versucht, die Favicon-Test, aber es war nicht in IE arbeiten. Ich benutzte die YouTube Player API Reference for iframe Embeds, um Youtube-Videos in meine Website einzubetten, also was ich getan habe, ist eine Überprüfung der Spieler var definiert kurz vor der onYouTubeIFrameReady mit einer Verzögerung bei der Javascript-Aufruf.

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

Scheint für mich zu arbeiten. Ich brauchte die Verzögerung, um es in IE zu arbeiten.

0

Das funktionierte für mich ... Es ist auch mein erster Beitrag, hoffe, dass es auch jemandem hilft.

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

Dies ist nicht wirklich eine Antwort auf die Frage - OP verwendet nicht PHP. – Sculper