1) В iframe добавить listener на событие popstate - onpopstate(если работаете с history api) или на событие load - onload(если смена url происходит стандартным способом).
2) Из iframe шлете сообщение во внешний мир через postMessage с нужной информацией.
3) На основной странице слушаете onmessage.
Будет ли popstate работать с чужими доменами? Заинтересовало, так как всегда думал, что определить адрес страницы внутри фрейма нельзя, если он с чужого домена.
Я предполагал, что у разработчика есть доступ к фрейму и его скриптам. Для cross-origin фрейма думаю не получится отследить popstate напрямую(например, через iframe.contentWindow.onpopstate).
Если фрейм с вашего же домена, то проблема элементарно решается через слушатель факта загрузки страницы:
iframe = document.querySelector('iframe'); // Ищем фрейм
// Вешаем на него слушатель:
iframe.addEventListener('load', function() {
var new url = iframe.contentWindow.location.href;
console.log('Изменён адрес внутри фрейма: ' + url);
});