Safari, Opera, IE, Chrome, Firefox obsługują ramki. To 98 % populacji internetowe wg statystyk stron, które prowadzę.
Primo: Nie czegoś takiego jak złe rozwiązanie jeżeli działa poprawnie. Opinie, że ramki to 'zło, staroć czy Sodoma i Gomora' są kompletnie nieuzasadnione. Jedyne co może być złe to sposób ich użycia. Każdy tutorial dla początkujących programistów webowych nawołuje do rezygnacji z ihc stosowania. Ma to oczywiście swój cel (np. ratuje przed pomysłem tworzenia menu opartego na ramkach), ale wprowadza dziwny trend i niepotrzebnie nastawia wszystkich 'na nie', uzasadniając to zwykle twierdzeniem 'bo tak'. Ramki stosuje się do tej pory dosyć często, głównie w aplikacjach intranetowych ze względów bezpieczeństwa.
Secundo: Jestem przeciwnikiem stosowania skomplikowanych rozwiązań takich jak AJAX do prostych stron/funkcji. Ilość opensourcowych (fakt, że często rewelacyjnych) rozwiązań wprowadza ostatnio manię stosowania framework'ów do obsługi dosłownie wszystkiego. Ostatnio wszedłem na stronę firmy zajmującej się sprzedażą glazury. Zdziwiło mnie, że strona ładowała się za pierwszym razem około 6-8 sekund. Co zawiniło ?
1.4 MB kodu JS. Było tam wszystko. Od frameworka obsługującego Js, poprzez panele, zakładki, guziczki i inne świecidła aż po wspomniany wyżej AJAX (którego zastosowanie było dla mnie bezsensowne)... Wszystko fajnie - tylko po co?

Boję się myśleć co było po stronie serwera i ile if'ów, for'ów i while'ów serwer musiał przemielić, żeby wyświetlić mi dane adresowe tej firmy. Dodam, że strona zawiera kilka podstron i prosty katalog produktów...
Sam Ajax'a stosuję tylko przy skomplikowanych stronach/aplikacjach - takich, przy których odświeżenie całej strony jest bolesne np. serwera baz danych. Oczywiście zachęcam do nauki tej techniki (dokładniej specyficznego zastosowania już istniejących technologii) jednak namawiam przy tym do umiaru. Sprawdź czy Twoje rozwiązanie działa poprawnie w większości przeglądarek. Jeżeli tak - nie kieruj się globalną opinią na temat iframe'ów. Moim zdaniem używasz ramki w sposób, do którego jest przeznaczona. Formularz kontaktowy można potraktować jako niezależny dokument/subcontent. Co do przeładowania: przeładowuje się tylko iframe a nie główny dokument. Ma to swoje wady i zalety. O tych drugich rzadko się wspomina. Iframe zawiera osobny dokument z własnym header'em a co za tym idzie z własnymi danymi meta itd. Jest kupa przypadków, w których taka sytuacja jest bardzo pożądana... Główną wadą iframe są problemy w indeksowaniu treści przez roboty (wyszukiwarek, ale niestety nie tylko), jednak formularz kontaktowy chyba nie kwalifikuje się do tej kategorii problemów? Jeżeli masz czas i ochotę: możesz oczywiście napisać samemu
relatywnie prosty skrypt bazujący na technice ajax, ale wątpię, że będzie to prostsze/szybsze rozwiązanie.