я могу поймать исключение Iframe в родительском окне Iframe - PullRequest
12 голосов
/ 13 июня 2011

У меня есть IFrame на странице, и у IFrame есть немного JavaScript.Во время выполнения JavaScript в IFrame выдает исключение, которое я хочу перехватить в родительском окне.Как это сделать?

<html> 
<head> 
<script type="text/javascript"> 
var frm123 = document.getElementById("frm123"); 
frm123.contentWindow.onerror = function() { 
    alert('error caught'); 
} 
function loadData() { 
    var oRTE = document.getElementById("frm123").contentWindow.document;
    oRTE.open(); 
    oRTE.write(txt123.value);
    oRTE.close();
} 
</script> 
</head> 
<body> 
<input type="button" onclick="loadData();" value="load"> 
<input type="text" id="txt123"> 
<iframe id = "frm123" > 
</body> 
</html>

Ответы [ 3 ]

20 голосов
/ 26 декабря 2012

Ответ зависит от того, имеете ли вы контроль над кодом iframe и является ли он тем же доменом.

Если тот же домен, то вы можете сделать следующее, чтобы установить функцию обработки ошибок из упаковочного документа:

document.getElementById("myiframe").contentWindow.onerror=function() {
    alert('error!!');
    return false;
}

убедитесь, что дождитесь завершения загрузки iframe перед установкой обработчика ошибок.

Если это не тот же домен, но вы управляете контентом iframe (оба домена находятся под вашим контролем), вы можете обмениваться данными с внешним фреймом, используя междоменную коммуникационную среду (Google или создайте ее самостоятельно), т.е. поймать ошибку в iframe, установив обработчик onerror изнутри iframe и отправить его через каркас во внешний документ.

Если это не тот же домен, и у вас нет контроля над iframe, внешний документ не может узнать, что происходит внутри него из-за ограничений безопасности.

3 голосов
/ 26 декабря 2012

Возможных причин, по которым функция .onError() может не работать, может быть несколько, это может быть из-за междоменных URL-адресов, для этого следует выполнить проверку перед фактической загрузкой iFrame и для этого использования

var url = "google.com"
var loading_url = "/empty.html"
document.getElementById("iframe").src = loading_url;
$.ajax({
url: url,
type: 'GET',
complete: function(e, xhr, settings){
     if(e.status === 200){
          document.getElementById("iframe").src = url;
     }
  }
});

Это не будет работать для междоменных доменов, код состояния в этих случаях равен 0.

Еще одна вещь, которую нужно проверить, - обработчик .onError(). Проверьте приведенный ниже пример, если он соответствует вашим условиям

Как я могу обрабатывать ошибки при загрузке iframe?

Существует множество других опций или настроек для обработки ошибок такого рода:

if (frameDoc.title == 'title of page after expection occur')

также выполнит работу, используя событие .onLoad() iFrame.

0 голосов
/ 13 июня 2011

Способ только - это если фрейм находится в том же домене, и в этом случае вы можете сделать это из родительского:

iframe.contentWindow.onerror = function(){
    // handle error
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...