当iframe URL无法加载时,停止打开精美的框3

时间:2018-12-07 09:29:44

标签: fancybox-3

如果无法通过Fancybox 3加载给定URL,我希望能够重定向到该URL。用户提供URL,因此它可以是youtube视频,图像或其他任意链接。如果是Google Doc之类的产品,则google会阻止您将其加载到iframe中,因此,我想捕获该错误并完全停止加载精美的浏览器,而是直接在浏览器中重定向到该URL。我可以使其正常运行,但似乎无法在重定向发生之前停止显示精美的对话框:

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

我尝试返回false。

2 个答案:

答案 0 :(得分:0)

这是我到目前为止提出的最好的结果:

$.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。

答案 1 :(得分:0)

正如@misorude所提到的,没有一种方法可以检测iframe是否无法为跨站点请求加载。最后,我决定完全取消预览场外链接,并像这样进行重定向:

A N  N  N  N  M  M  M  W  W  N  W  W
B N  W  W  W  N  N  N  N  N  N  N  N
  0  1  2  3  4  5  6  7  8  9 10 11

这将显示一个不错的重定向消息,然后通过浏览器将用户发送到该链接。 $.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,而其他媒体类型插件中的htmlimagevideo等...除外。这意味着fancybox仍然可以毫无问题地显示youtube链接,即使这些链接基于iframe和html。