Я хочу указать альтернативное изображение, которое будет отображаться при сбое oEmbed.
Конкретный вариант использования - предложить альтернативу, когда Китай (или другие страны) блокируют YouTube. Мы знаем, что контент YouTube там не будет доступен, но хотим предоставить альтернативное изображение в этом случае.
Можно ли сделать код ошибки oEmbed доступным для этой цели?
GET /photos/bees/2362225867/ HTTP/1.1 Host: flickr.com Accept: application/oembed+xml
. Альтернативой по умолчанию является получение HTTP-кода ошибки, например 406 Not Acceptable. Это должно быть полезно для возврата сообщения.<iframe>
HTML, и это то, что встраивается в сообщение, и это то, что является сервером для клиента: a<iframe>
. Когда клиент из Китая пытается загрузить контент,<iframe>
он блокируется. Там нет ничего на стороне сервера. Я не тестировал с другими провайдерами oEmbed, но думаю, что все они работают одинаково. Фактически, если oEmbed будет выполнен на стороне клиента, никакого реального содержимого не будет.Ответы:
Я думаю, что лучшее, что нужно сделать в этом случае, - это обернуть содержимое oEmbed
div
перед тем, как они будут отрисованы, а затем показать альтернативное изображение соbackground-image
свойством CSS . Если видео загружается, то содержимое oEmbed будет закрывать фоновое изображение.Вы можете добавить обертку, используя
embed_oembed_html
фильтр.Если вас беспокоит загрузка дополнительных элементов, вы можете выполнить проверку на стороне клиента с помощью JS, чтобы увидеть, загружен ли oEmbed, и, если нет, загрузить фоновое изображение в оболочку.
Вы можете сделать намного более сложным, добавив пользовательские поля для каждого видео, но это, по сути, суть.
источник
Один из подходов может заключаться в том, чтобы сделать другой запрос, используя oEmbed на стороне сервера через прокси, который находится в Китае.
Таким образом, вы заранее знаете, будет ли сбой при обращении к ресурсу на клиенте. В начале запроса страницы вы можете определить, где географически расположен IP-адрес клиента, выполнить серверный вызов через прокси-сервер к ресурсу, например youtube, а затем использовать ошибку oEmbed, которую вы, вероятно, получите.
Вы могли бы взглянуть на Wonderproxy для достижения этого (я не связан с ними, но слышу хорошие вещи)
источник