я бы предпочел следующий вариант, потому что использовать автоматически создаваемые глобальные переменные не лучшая привычка
setTimeout(function() {
var iframe = document.getElementById('frame');
var w = iframe.contentWindow || iframe.contentDocument.window;
w.ab();
}, 3000);