Подтвердить что ты не робот

Ошибка источника top.postMessage

Я пытаюсь реализовать связь с postMessage. Существует основная страница, которая открывает всплывающее окно с iframe, который поступает из другого домена. Пока это прекрасно работает, но я хочу уловить следующую ошибку, которая возникает, когда я открываю iFrame с неправильным происхождением.

Failed to execute 'postMessage' on 'DOMWindow': The target origin provided ('myOriginURL') does not match the recipient window origin ('myWindowsOrigin').

origin = 'http://www.myorigin.ch';
if (window.postMessage) {
  try {
     top.postMessage('hello', origin);
  } 
  catch(ex) {
     alert('an error occured');
  }
}   

проблема заключается в том, что код никогда не попадает в блок catch. Интересная часть заключается в том, что хром показывает ошибку в консоли, а все остальные крупные браузеры ничего не делают (без предупреждения, без ошибок)

Как я могу обработать ошибку в postMessage?

Спасибо

4b9b3361

Ответ 1

Это связано с тем, что ошибка возникает в домене, загружаемом в iFrame. Выделите код, который отправляет сообщение блоком try{}catch(e){} и отправляет соответствующее сообщение об ошибке слушателю, чтобы обработать его там.

try{
parent.postMessage({"success":true,"usertoken":localStorage.token},"*");
}
catch(e){
parent.postMessage({"success":false},"*");

}