我的“解决方案”没有检测到所有 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 修复,但这个问题已经存在了一段时间,现在没有答案。显然,这个解决方案不是一个完美的解决方案,但它非常适合我的网站的需求。任何建议|将受到欢迎。