2

我有这个 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 是否正确加载?我想是的,如果 Firebug 能抓住它。

4

1 回答 1

6

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

我在调用 load() 事件的 iframe 中有 onload="load()" 。唯一的问题是即使加载失败,这个加载事件也会被调用。我试过使用 onerror="error()" 事件,但它永远不会被调用。

我知道这有点 hacky,但我找不到更好的东西,所以作为解决方法,我做了以下事情:

当请求 iframe 时,我在页面某处以毫秒为单位设置 iframeRequestTime。当调用 load() 事件时,我得到了 loadTime。然后我发现了 loadTime 和 requestTime 之间的区别。如果请求被阻塞,响应会很快,所以差异会很小。我已经设置了,如果差异小于 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()
    }
}

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

于 2014-09-12T14:11:09.740 回答