Ian Pearce defied injury to limp forward and snatch an injury-time equaliser for Fulham.
Niko Kranjcar is mobbed after putting Pompey in front at Fulham
Portsmouth led through Niko Kranjcar's curling 20-yard effort after four minutes and looked destined to revive their hopes of a Uefa Cup place.
But Pearce, struggling with a foot injury, denied David James a record 142 Premiership clean sheets with a deflected shot deep into stoppage time.
James and Fulham counterpart Antti Niemi both excelled with fine saves.
Kranjcar provided Pompey with the perfect start after only four minutes with his first goal for the club.
He collected Kanu's flick on an angle before startling Fulham keeper Niemi with a brilliant strike.
It was a rare highlight in a dour first half - although James was also called into action to keep Pompey level as Fulham pressed.
He was at full stretch to turn Tomasz Radzinski's dipping volley over the top, and then produced a stunning save low to his right to deny Franck Queudrue from 25 yards three minutes before the interval.
Fulham boss Chris Coleman made an inevitable change after 56 minutes, sending on Wayne Routledge for the disappointing Papa Bouba Diop.
James then showed the two sides of his nature within seconds as Fulham started to pose threat.
He was fortunate to escape when he inexplicably misjudged a cross from Simon Davies, but redeemed himself with a fine diving save from Alexei Smertin.
Fulham also sent on Vincenzo Montella in a bid to add firepower, and he should have done better than fire wildly over from Brian McBride's cross after 64 minutes.
Pompey created a chance of their own with nine minutes left, substitute Svetoslav Todorov shooting powerfully against the legs of Niemi.
Niemi then produced even better save to deny Todorov again, flying to his right to save spectacularly.
It provided the platform for a late Fulham surge, capped by Pearce's deflected 18-yard shot that left James wrong-footed.
Fulham manager Chris Coleman:
"Ian Pearce deserved that goal. I wanted to take him off because I didn't want to make his injury worse.
"Knowing him he wouldn't have come off, but one minute he is injuring himself stopping a Portsmouth chance and the next he is up front getting the equaliser for us.
"It was a fantastic effort and typical of him."
Portsmouth manager Harry Redknapp:
"This is a real opportunity lost for us.
"We should be going back home with all three points and moving back up towards sixth place in the table.
"It is frustrating when you are in front with two minutes to go, have had chances to wrap up the game, and then concede an equaliser like that."
Fulham: Niemi, Rosenior, Pearce, Bocanegra, Queudrue, Smertin, Davies, Brown, Diop (Routledge 57), McBride (John 65), Radzinski (Montella 62).
Subs Not Used: Lastuvka, Helguson.
Goals: Pearce 90.
Portsmouth: James, Lauren, Campbell, Primus, Stefanovic, O'Neil, Hughes, Davis, Kranjcar (Taylor 61), Mwaruwari (Mvuemba 83), Kanu (Todorov 80).
Subs Not Used: Ashdown, LuaLua.
Goals: Kranjcar 4.
Ref: M Riley (W Yorkshire).