
You can hide the requested page in the width of the float (making it 4sp wider than the page for page 4, or to enable twocolumn support double the value, adding one for the 2nd column) and then adjust the code that looks for (the power of 2 representing) t in [htb]arguments to report t not present on such over-wide floats until the appropriate page is found.
\documentclass{article}
\usepackage{placeonpage}
\usepackage{lipsum}
\begin{document}
\begin{figure}[t]
\centering
\rule{3cm}{3cm}
\caption{A figure on page 4}
\placeonpage{4}
\end{figure}
\begin{figure}[t]
\centering
\rule{3cm}{3cm}
\caption{A figure on page 6}
\placeonpage{6}
\end{figure}
\lipsum\lipsum\lipsum\lipsum
\end{document}
a two column example

\documentclass[twocolumn]{article}
\usepackage{placeonpage}
\usepackage{lipsum}
\begin{document}
\begin{figure}[t]
\centering
\rule{3cm}{3cm}
\caption{A figure on top page 4}
\placeonpage{4}
\end{figure}
\begin{figure}[b]
\centering
\rule{3cm}{3cm}
\caption{A figure on bottom page 5}
\placeonpage{5}
\end{figure}
\begin{figure}[t]
\centering
\rule{3cm}{3cm}
\caption{A figure on top right page 6}
\placeonrightcolumn{6}
\end{figure}
\begin{figure}[t]
\centering
\rule{7cm}{3cm}
\caption{A spanning figure on top page 8}
\placeonpage{8}
\end{figure}
\lipsum\lipsum\lipsum\lipsum
\lipsum\lipsum\lipsum\lipsum
\end{document}
placeonpage.sty
\let\latex@getfpsbit\@getfpsbit
\def@getfpsbit#1{%
\ifnum\numexpr2*\c@page\if@firstcolumn\else+1\fi\relax
<\numexpr\wd@currbox-%
\ifdim\f@depth=\z@\columnwidth\else\textwidth\fi\relax
@tempcnta\z@
\else
\latex@getfpsbit#1%
\fi
}
\def\placeonpage#1{%
\hrule height 0pt depth 0pt width \dimexpr\hsize+\numexpr2(#1)\relax sp\relax}
\let\placeoleftcolumn\placeonpage
\def\placeonrightcolumn#1{%
\hrule height 0pt depth 0pt width \dimexpr\hsize+\numexpr2(#1)+1\relax sp\relax}