当oEmbed失败时,显示替代


8

我想指定当oEmbed失败时将显示的替代图像。

具体用例是在中国(或其他国家)阻止YouTube时提供替代方案。我们知道YouTube内容在那里不可用,但是在这种情况下,我们想提供一个备用图片。

为此,可以使oEmbed错误代码可访问吗?


非常有趣的问题。不幸的是,我没有给您提供帮助,但这绝对是值得研究的东西。
Pieter Goosen 2015年

1
我一直在研究这个问题。我已经深入了很多,但是没有找到任何解决方案。问题在于,oEmbed请求是从Web服务器而不是客户端完成的。在服务器上,一切正常,并且嵌入的HTML由YouTube返回;即加载视频的iframe。客户端尝试加载iframe内容时,就是该内容被阻止。据我了解,oEmbed不会失败,我们无能为力或无能为力。期待别人对此的看法。
cybmeta 2015年

我认为,不确定(不确定)oembed的API是否适用于RESTful API。该API像这样向客户端返回答案GET /photos/bees/2362225867/ HTTP/1.1 Host: flickr.com Accept: application/oembed+xml。替代方法是获取错误http代码的默认值,例如406 Not Acceptable。这对于返回消息很有用。
bueltge 2015年

@bueltge从oEmbed返回的答案不会发送给客户端。至少不像我在评论中所说的那样。oEmbed请求是在服务器端完成的,YouTube返回<iframe>HTML,这就是嵌入在帖子中的内容,也就是对客户端的服务器:a <iframe>。当来自中国的客户端尝试加载的内容<iframe>时,它被阻止。没有涉及服务器端。我尚未与其他oEmbed提供商进行测试,但我认为它们都以类似的方式工作。实际上,如果将oEmbed嵌入客户端,则不会嵌入任何实际内容。
cybmeta 2015年

1
我看到的唯一选择是通过javascript检查嵌入的内容。如果您没有获得视频iframe,则可能会显示其他内容……
jjarolim 2015年

Answers:


1

我认为在这种情况下,最好的做法是div在呈现之前将oEmbed内容包装为a ,然后使用CSS background-image属性显示替代图像。如果视频加载,则嵌入的内容将覆盖背景图像。

您可以使用embed_oembed_html过滤器添加包装器。

add_filter('embed_oembed_html', 'your_function_here');

如果您担心要加载额外的元素,则可以使用JS进行客户端检查,以查看oEmbed是否已加载,如果未加载,则将背景图像加载到包装器中。

通过为每个视频添加自定义字段,您可能会变得更加复杂,但这实际上是要点。


0

一种方法可能是通过位于中国的代理在服务器端使用oEmbed发出另一个请求。

这样,您将提前知道客户端上的资源调用是否会失败。在页面请求的早期,您可以确定客户端IP的地理位置,通过代理对资源(例如youtube)进行服务器端调用,然后利用可能会出现的oEmbed错误。

您可以看看Wonderproxy实现了这一目标(我与他们无关,但听到的很好)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.