Do you have control over those pages that get loaded inside the iframe? If so then you can just add to all of them a js file that only does this:
parent.loaded(document.location.href);
Then in the main page, where you have the iframe have this:
function loaded(url) {
alert('"' + url + '" was loaded');
}
For this to work you also need to serve all the pages in the iframe from the same domain as the main page.
EDIT
Since you serve the iframe pages from the same domain as the main one, you need to have control of the server that is serving the pages, so even if you can't modify the code, you can modify it at "run-time" when the server return the content. You can for example return a modified version of a js file that is always loaded with something like parent.loaded(document.location.href);.
This might seem more complicated than using setTimeout, but it's another solution none the less.
Another thing that you can do, since you have access to the dom, is to register to the onunload event so that you can use setTimeout when you know for sure that the page is about to be reloaded, that will prevent a continues none stopping timer.
With all of that said, maybe this is not the best way to implement this monitoring? Maybe you can implement this with a browser extension? Those privileged to be aware of changes in locations of all the documents.
Another Edit
You might want to try to use this onload event for iframes