如果iframe src加载失败,则捕获错误。 错误: – “拒绝在框架中显示”http://www.google.co.in/“..”
我正在使用Knockout.js来绑定iframe src标记(这将相对于用户可configuration)。 
现在,如果用户configuration了http://www.google.com (我知道它不会在iframe中加载,这就是为什么我用它为-ve场景),并且必须在IFrame中显示。 但它会抛出错误:
拒绝在框架中显示“ http://www.google.co.in/ ”,因为它将“X-Frame-Options”设置为“SAMEORIGIN”。
我有以下代码的iframe: –
 <iframe class="iframe" id="iframe" data-bind="attr: {src: externalAppUrl, height: iframeheight}"> <p>Hi, This website does not supports IFrame</p> </iframe> 
 我想要的是,如果URL无法加载。 我想显示自定义消息 。  FIDDLE HERE
  FIDDLE HERE 
现在,如果我使用onload和onerror作为: –
 <iframe id="browse" style="width:100%;height:100%" onload="alert('Done')" onerror="alert('Failed')"></iframe> 
它工作正常加载w3schools.com但不是与google.com。
其次: – 如果我把它作为一个函数,并尝试像我在我的小提琴那样做,它不起作用。
 <iframe id="browse" style="width:100%;height:100%" onload="load" onerror="error"></iframe> 
我不知道如何让它运行并捕获错误。
编辑:我见过想要调用一个函数,如果iframe不加载或加载的问题在stackoverflow,但它显示错误的网站,可以在iframe中加载。
另外,我已经看到了加载事件的Stackoverflow iframe谢谢!
 我认为你可以绑定iframe的load事件,事件在iframe内容被完全加载时触发。 
同时你可以启动一个setTimeout,如果iFrame被加载了,清除超时或者让超时启动。
码:
 var iframeError; function change() { var url = $("#addr").val(); $("#browse").attr("src", url); iframeError = setTimeout(error, 5000); } function load(e) { alert(e); } function error() { alert('error'); } $(document).ready(function () { $('#browse').on('load', (function () { load('ok'); clearTimeout(iframeError); })); }); 
演示: http : //jsfiddle.net/IrvinDominin/QXc6P/
第二个问题
这是因为你错过了内联函数调用中的parens; 尝试改变这一点:
 <iframe id="browse" style="width:100%;height:100%" onload="load" onerror="error"></iframe> 
进入这个:
 <iframe id="browse" style="width:100%;height:100%" onload="load('Done func');" onerror="error('failed function');"></iframe> 
演示: http : //jsfiddle.net/IvinvinDominin/ALBXR/4/
由于浏览器设置了“ 相同原点”策略,您无法从客户端执行此操作。 除了宽度和高度等基本属性外,您无法从iFrame获取更多信息。
另外,google在响应头文件中设置了SAMEORIGIN的“ X-Frame-Options ”。
即使你做了一个ajax调用谷歌,你将无法检查响应,因为浏览器强制执行同源策略。
所以,唯一的select是从服务器发出请求,看看是否可以在IFrame中显示该网站。
因此,在您的服务器上,您的Web应用程序将向www.google.com发出请求,然后检查响应以查看它是否包含X-Frame-Options的标题参数。 如果它确实存在,那么你知道IFrame会出错。
onload将永远是触发器,我解决这个问题使用try catch块。它会抛出一个exception,当你尝试获取contentDocument。
 iframe.onload = function(){ var that = $(this)[0]; try{ that.contentDocument; } catch(err){ //TODO } } 
我面临类似的问题。 我解决了它没有使用onload handler.I正在AngularJs项目,所以我使用$间隔和$超时。 U也可以使用setTimeout和setInterval.Here的代码:
  var stopPolling; var doIframePolling; $scope.showIframe = true; doIframePolling = $interval(function () { if(document.getElementById('UrlIframe') && document.getElementById('UrlIframe').contentDocument.head && document.getElementById('UrlIframe').contentDocument.head.innerHTML != ''){ $interval.cancel(doIframePolling); doIframePolling = undefined; $timeout.cancel(stopPolling); stopPolling = undefined; $scope.showIframe = true; } },400); stopPolling = $timeout(function () { $interval.cancel(doIframePolling); doIframePolling = undefined; $timeout.cancel(stopPolling); stopPolling = undefined; $scope.showIframe = false; },5000); $scope.$on("$destroy",function() { $timeout.cancel(stopPolling); $interval.cancel(doIframePolling); }); 
每0.4秒钟不断检查iFrame文档的头部。 我的东西是存在的。加载不被CORS停止,因为CORS错误显示空白页面。 如果5秒后没有任何内容存在错误(Cors策略)等。显示合适的信息。谢谢。 我希望它能解决你的问题。