You are not permitted to download, save or email this image. Visit image gallery to purchase the image.
A record 10th-wicket partnership saw England amass a formidable first-innings total before rampaging through the home's team batting order to take a stranglehold on the game and move closer to a series victory.
Quinton de Kock was 32 not out at the close after Anrich Nortje was caught in the slips on the last ball of the day, heightening the possibility of South Africa following on for a second successive test.
The home side's confidence had already taken a hefty knock when their bowlers were subjected to a bashing from tailenders Stuart Broad and Mark Wood, whose 82-run partnership was a record for the last wicket at the Johannesburg venue.
South Africa, 2-1 down in the series, would still have held out hopes of a fightback when they had England 318-9 but after leaking runs and then being tumbled out by the touring bowlers, they again have their backs to the wall.
Wood led the way in the evening session with 3-21 as England removed Pieter Malan (15), Rassie van der Dussen (0), Dean Elgar (26), Faf du Plessis (3) and Temba Bavuma (6) with their five-man seam attack generating real pace off the quick wicket.
Ben Stokes took two catches after a series of dropped efforts in the third test last weekend.
"We found the right, fuller length on that surface and now we're in a really strong position," Chris Woakes said.
In contrast, South Africa’s bowlers were punished as Broad, who made 43 off 28 balls, and Wood, not out on 35, thrashed the ball to all parts, forcing South Africa into the seldom-seen scenario of eight boundary fielders trying to defend against No. 10 and No. 11 batsmen.
There were also half centuries for captain Joe Root and Ollie Pope and a valuable 32 from Woakes in his first appearance on the tour. Nortje (5-110) took a maiden test five-wicket haul.
England were 192-4 overnight when play began 45 minutes late because of a rain delay and steadily moved the scoreboard along as Pope, first, and then Root got to 50.
Pope (56) continued to build on his growing reputation and looked the senior batsman at times as he and Root (59) put on 101 runs for the fifth wicket.