如果无法通过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。
答案 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
,而其他媒体类型插件中的html
,image
,video
等...除外。这意味着fancybox仍然可以毫无问题地显示youtube链接,即使这些链接基于iframe和html。