如何捕获 iframe 加载错误

How to catch a iframe loading error?

本文关键字:错误 加载 iframe 何捕获      更新时间:2023-09-26

我有这个iframe:

<iframe id="website-overlay" src="link" onload="OverlayMostraCustomContenuto()"></iframe>

但是即使加载时出现错误,也会加载此函数,例如:

Load denied by X-Frame-Options: http://www.youtube.com/watch?v=Q4cQsoz4mFA&feature=share does not permit cross-origin framing.

有没有办法知道iframe是否正确加载?我想是的,如果火虫能抓住它。

我的"解决方案"不会检测到所有 iframe 错误,但它确实会在您无法控制的网站上"检测"问题中提到的错误。

我在 iframe 中有 onload="load()" 调用 load() 事件。唯一的问题是,即使加载失败,也会调用此加载事件。我尝试使用 onerror="error()" 事件,但它从未被调用。

我知道这有点笨拙,但我无法找到更好的东西,所以作为解决方法,我执行以下操作:

当请求 iframe 时,我在页面上的某个位置以毫秒为单位设置 iframeRequestTime。当 load() 事件被调用时,我得到了 loadTime。然后我找到了加载时间和请求时间之间的区别。如果请求被阻止,响应将很快,因此差异将很小。我已经设置了它,如果差异小于 1000 毫秒,我删除 iframe 并在新窗口中打开 URL。我认为,除非网站真的很小,或者除非你有令人难以置信的快速互联网连接,否则大多数网站都不会在 1000 毫秒内完全加载。

function LoadIFrame(url) {
    // Create & display iframe
    var iframe = '<iframe src="' + url + '" onload="load()"></iframe>';
    $('#iframeHolder').append(iframe);
    // Time
    var time = new Date().getTime();
    $('#iframeHolder').attr('data-time', time);
}
function load() {
    var requestTime = $('#iframeHolder').attr('data-time');
    var loadTime = new Date().getTime();
    var difference = loadTime - requestTime;
    if (difference < 1000) {
        var url = $('#iframeHolder iframe').attr('src');
        window.open(url, '_blank');
        $('#iframeHolder').empty()
    }
}

通常我不会发布如此笨拙的修复程序,但这个问题已经存在了一段时间,没有答案。显然,此解决方案不是一个完美的解决方案,但它非常适合我网站的需求。任何建议|将受到欢迎。