Прекратить открывать фантазийный блок 3, если не удается загрузить URL-адрес - PullRequest
0 голосов
/ 07 декабря 2018

Я бы хотел иметь возможность перенаправить на заданный URL-адрес, если он не загружается с Fancybox 3. Пользователи предоставляют URL-адреса, чтобы это могло быть видео, изображение или какая-либо другая произвольная ссылка на YouTube.В случае с чем-то вроде Google Doc, Google запрещает вам загружать эти внутренние фреймы, поэтому я хотел бы отловить эту ошибку и вообще запретить загрузку модного окна просмотра, а вместо этого перенаправить на этот URL-адрес прямо в браузере.Я могу заставить его работать, но я не могу остановить отображение диалогового окна причудливого окна до того, как произойдет перенаправление:

$.fancybox.defaults.afterLoad = (instance, current) ->
  if current.hasError
    window.location = current.src
    instance.close()

Я попытался вернуть false.

Ответы [ 2 ]

0 голосов
/ 10 декабря 2018

Как упоминает @misorude, невозможно определить, не удалось ли загрузить iframe для межсайтовых запросов.В конце концов я решил покончить с предварительным просмотром сторонних ссылок и выполнить перенаправление следующим образом:

$.fancybox.defaults.afterLoad = (instance, slide) ->
  if !slide.redirecting && slide.contentType == 'html'
    slide.redirecting = true
    message = """<div class="fancybox-error"><p>Redirecting...</p></div>"""
    instance.setContent slide, message
    window.location = slide.src

Это отобразит хорошее сообщение о перенаправлении, а затем отправит пользователя по этой ссылке через браузер.contentType - это html, только если это не image, video, map и т. Д. Из других плагинов медиа-типа.Это означает, что fancybox по-прежнему может без проблем показывать ссылки на YouTube, даже если они основаны на iframe и html.

0 голосов
/ 07 декабря 2018

Это лучшее, что я когда-либо придумал:

$.fancybox.defaults.defaultType = 'iframe'
$.fancybox.defaults.beforeLoad = (instance, current) ->
  $.ajax
    url: current.src
    method: 'HEAD'
  .catch ->
    window.location = current.src
    instance.close()

По умолчанию для URL-адреса ajax, если он не проходит все остальные тесты (например, изображение и видео), поэтому нам нужносначала переключить это на iframe.Затем я выполняю вызов ajax HEAD, чтобы посмотреть, успешен ли результат, если нет, мы можем просто перенаправить на src.instance.close() - лучший способ остановить загрузку fancybox (он уже может быть загружен, если это слайд-шоу / галерея в любом случае).Перед тем, как страница перенаправляется на URL-адрес, происходит короткая вспышка.

...