Ich möchte ein alternatives Bild angeben, das angezeigt wird, wenn oEmbed fehlschlägt.
Der spezielle Anwendungsfall besteht darin, eine Alternative anzubieten, wenn China (oder andere Länder) YouTube blockieren. Wir wissen, dass der YouTube-Inhalt dort nicht verfügbar ist, möchten aber in diesem Fall ein alternatives Bild bereitstellen.
Kann der oEmbed-Fehlercode zu diesem Zweck zugänglich gemacht werden?
GET /photos/bees/2362225867/ HTTP/1.1 Host: flickr.com Accept: application/oembed+xml
. Alternativ wird standardmäßig ein Fehler-http-Code angezeigt, z. B. 406 Not Acceptable. Dies sollte nützlich sein, um eine Nachricht zurückzugeben.<iframe>
HTML- Code zurück und dies ist das, was in den Beitrag eingebettet ist, und das ist der Server für den Client: a<iframe>
. Wenn der Client aus China versucht, den Inhalt des zu laden<iframe>
, wird er blockiert. Es ist nichts serverseitig beteiligt. Ich habe nicht mit anderen oEmbed-Anbietern getestet, aber ich denke, dass sie alle auf ähnliche Weise funktionieren. Wenn das oEmbed clientseitig durchgeführt würde, wären keine echten Inhalte eingebettet.Antworten:
Ich denke, das Beste, was Sie in diesem Fall tun können, ist, Ihren oEmbed-Inhalt
div
vor dem Rendern mit einem zu versehen und dann ein alternatives Bild mit der CSS-background-image
Eigenschaft anzuzeigen . Wenn das Video geladen wird, deckt der oEmbed-Inhalt das Hintergrundbild ab.Sie können den Wrapper mithilfe des
embed_oembed_html
Filters hinzufügen .Wenn Sie Bedenken haben, zusätzliche Elemente zu laden, können Sie mit JS eine clientseitige Überprüfung durchführen, um festzustellen, ob das oEmbed geladen wurde, und wenn nicht, ein Hintergrundbild in den Wrapper laden.
Sie könnten viel komplizierter werden, wenn Sie benutzerdefinierte Felder für jedes Video hinzufügen, aber das ist im Wesentlichen das Wesentliche.
quelle
Ein Ansatz könnte darin bestehen, eine weitere Anfrage über oEmbed auf der Serverseite über einen in China ansässigen Proxy zu stellen.
Auf diese Weise wissen Sie im Voraus, ob der Aufruf der Ressource auf dem Client fehlschlägt. Zu Beginn der Seitenanforderung können Sie feststellen, wo sich die IP des Clients geografisch befindet, einen serverseitigen Anruf über einen Proxy an die Ressource, z. B. YouTube, tätigen und dann den vermutlich aufgetretenen oEmbed-Fehler nutzen.
Sie könnten sich Wonderproxy ansehen, um dies zu erreichen (ich bin nicht mit ihnen verbunden, höre aber gute Dinge).
quelle