15 Stimmen

Erkennen, ob YouTube von Unternehmen / Internetdienstanbieter blockiert wird

Wir haben YouTube-Videos auf einer Website und möchten feststellen, ob es wahrscheinlich ist, dass sie sie aufgrund von (hauptsächlich) Unternehmensrichtlinien oder anderweitig nicht anzeigen können.

Wir haben zwei Websites:

1) Flex / Flash 2) HTML

Ich denke, mit Flex kann ich versuchen, http://youtube.com/crossdomain.xml herunterzuladen und wenn es gültiges XML ist, annehmen, dass die Website verfügbar ist

Aber bei HTML weiß ich nicht, wie ich es machen soll. Ich kann nicht einmal an einen 'netten Hack' denken.

21voto

tiangolo Punkte 1416

Ich mag die Lösung von Lacker, aber ja, sie erzeugt eine Wettlaufsituation. Das wird funktionieren und keine Wettlaufsituation erzeugen:

var image = new Image();
image.onload = function(){
// Der Benutzer kann auf Youtube zugreifen
};
image.onerror = function(){
// Der Benutzer kann nicht auf Youtube zugreifen
};
image.src = "http://youtube.com/favicon.ico";

4 Stimmen

Wie auch bei Lacker's Lösung, führt dies bei der Blockierungsseite zu einem falschen Positiv, wenn diese ein Favicon hat. Sie sollten überprüfen, ob etwas Charakteristisches für YouTube vorhanden ist.

0 Stimmen

@Colin Pickard: Guter Punkt. Vielleicht hast du recht. Aber ich vermute, dass wenn es eine Blockierungsseite gibt, sie einen HTTP 404 (Nicht gefunden) oder einen anderen Fehlerstatuscode verwenden würde, also denke ich, dass der Abruf des Bildes fehlschlagen würde. Ich vermute, der richtige Weg wäre, eine XMLHttpRequest durchzuführen und die Antwort zu überprüfen, aber das Favicon ist einfacher zu kodieren und einfacher als beispielsweise ein Handybrowser es implementiert.

0 Stimmen

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

14voto

lacker Punkte 5229

Sie können ein Bild von Youtube mit Javascript laden und seine Eigenschaften überprüfen. Das Favicon ist winzig und hat eine konsistente URL -

var image = new Image();
image.src = "http://youtube.com/favicon.ico";
if (image.height > 0) {
    // Der Benutzer kann auf Youtube zugreifen
} else {
    // Der Benutzer kann nicht auf Youtube zugreifen
}

Ich denke, dass dies etwas besser ist als das Laden von Javascript, da dies keinen Code ausführen wird und während Youtube möglicherweise ihre Javascript-Dateien umbenennt oder Funktionen aus diesen Dateien umbenennt, ist es unwahrscheinlich, dass sie jemals ihr Favicon umbenennen.

0 Stimmen

Ich mag das lieber als meine eigene Lösung

0 Stimmen

Wird es hier nicht zu einem Rennzustand kommen?

0 Stimmen

@simon Wie entsteht hier ein Wettkampfzustand?

8voto

Tristan Havelick Punkte 62865

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

        function has_you_tube()
        {
            if(typeof addVideosToQuicklist == 'function')
            {
                return true;
            }
            else
            {
                return false;
            }

        }

    alert( "has_youtube: " + has_you_tube() );

1 Stimmen

Bitte beachten Sie, dass eine gute Möglichkeit, dies zu testen ist, ist, 127.0.0.1 www.youtube.com zu Ihrer Hosts-Datei hinzuzufügen.

0 Stimmen

Was? Warum würde die Datei 127.0.0.1/js/account.js existieren und diese Funktion darin haben?

2 Stimmen

@Karl: Das ist eine Möglichkeit, den Fall zu testen, wenn Youtube blockiert ist. Natürlich würde der unblockierte Fall getestet werden, indem diese Zeile aus den Hosts entfernt wird.

1voto

mdogggg Punkte 11

Ich bin heute daran gescheitert und habe den Favicon-Test versucht, aber es hat im IE nicht funktioniert. Ich habe die YouTube Player API-Referenz für iframe-Einbettungen verwendet, um YouTube-Videos in meine Website einzubetten, also habe ich eine Überprüfung auf die player-Variable durchgeführt, die kurz vor dem onYouTubeIFrameReady mit einem Zeitverzögerung auf den JavaScript-Aufruf definiert wurde.

 function YouTubeTester() {            
            if (player == undefined) {
                alert("YouTube blockiert");
            }
        }

window.setTimeout("YouTubeTester()", 500);

Scheint bei mir zu funktionieren. Ich brauchte die Verzögerung, um es im IE zum Laufen zu bringen.

0voto

Dies hat für mich funktioniert... Es ist auch mein erster Beitrag, hoffe es hilft auch jemandem.

 0)

{ ?>
    YOUTUBE VIDEO GEHT HIER HIN

     keine Verbindung";

}

?>

1 Stimmen

Dies ist eigentlich keine Antwort auf die Frage - OP verwendet kein PHP.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X