Andy Yiadom grabbed a late equaliser to earn Reading a point and prevent Swansea City going back to the top of the Championship table.
Borja Baston had coolly guided Andre Ayew’s cross into the far corner of the net to give the hosts the dream start.
They had chances to extend their lead but also had to be wary of a Royals side who were more than happy to press bodies forward when the chance arose.
And the visitors got their reward for a positive second-half display when Yiadom fired an angled drive into the far corner of net in the final minute of normal time.
Cooper had made just the one enforced change from the draw at Bristol City, bringing in Connor Roberts at right-back, as Kyle Naughton moved to the left to cover the absence of the suspended Jake Bidwell.
The Swans could not have wished for a better start as they led inside three minutes.
Roberts found Ayew down the right, with the Ghanaian allowed to cut in onto his left foot and produce a wonderful cross that Borja glanced home with aplomb as Rafael Cabral stood rooted to his line.
It was a fast-paced start from the hosts, with Michael Morrison scrambling clear a Bersant Celina cross after Matt Grimes had picked out the Kosovo international on the left.
Morrison then sliced a clearance wide of his own goal from a Roberts cross.
But Reading looked a threat on the counter, committing numbers forward when the opportunity to break presented itself.
They should have levelled in the 13th minute when John Swift’s corner caused problems in the Swansea defence, only for George Puscas to prod over the bar.
Swansea responded with a lovely exchange of passes between Celina, Jay Fulton and Borja allowing George Byers to curl just wide from the edge of the area.
The Royals lost defender Tyler Blackett to injury just past the 20-minute mark, with manager Jose Gomes opting to send on striker Lucas Joao in his place.
But the hosts remained in the ascendancy, Liam Moore making an excellent block after a lovely Byers lay-off to Fulton.
Freddie Woodman calmly held an ambitious effort from Joao as half-time neared while, at the other end, Ayew fired into the side-netting from a sharp counter.
There was a lovely fluency to much of Swansea’s play, and Cabral did well to get off his line quickly as Ayew bore down on goal from Borja’s pass.
And Reading’s task should have been made more difficult just before the break when Lucas Boye – already on a booking – cynically pulled back Grimes.
Yet referee Keith Stroud puzzlingly elected not to show a second caution, and Boye was withdrawn by the visitors upon the resumption.
Reading made a good start to the second half, with Mike van der Hoorn and Joe Rodon having to be alert to keep Swift and Joao at bay respectively.
The hosts had not really got going but they did carve out a decent chance on the hour as Roberts sent Celina’s pull-back over the bar.
Excellent pressing play by Borja produced another chance, this time for Byers, but the midfielder’s effort was smothered by a handful of black shirts.
Celina then burned Yiadom for pace, but no white jersey could turn his cross goalward.
Reading responded, Ovie Ejaria skipping his way past four challenges to force Woodman to block at his near post.
Cooper shuffled his pack as Sam Surridge and Jordon Garrick replaced Borja and Celina, while Tom Carroll came on for his first league appearance for the club in almost a year.
But Reading stunned the Liberty as Yiadom finished in emphatic fashion from the left side of the area.
Swansea City: Freddie Woodman; Connor Roberts, Mike van der Hoorn, Joe Rodon, Kyle Naughton, Jay Fulton (Tom Carroll 82), Matt Grimes (captain); Andre Ayew, George Byers, Bersant Celina (Jordon Garrick 76); Borja Baston (Sam Surridge 77).
Subs not used: Erwin Mulder, Ben Wilmot, Yan Dhanda, Nathan Dyer.
Reading: Rafael Cabral, Michael Morrison, Liam Moore (captain), Andy Rinomhota, John Swift, Jordan Obita (Omar Richards 81), Ovie Ejaria, Andy Yiadom, Lucas Boye (Josh Barrett 46), Tyler Blackett (Lucas Joao 21), George Puscas.
Subs not used: Sam Walker, Tom McIntyre, Michael Olise, Pele.
Referee: Keith Stroud