Match ends, Fulham 1, Swansea City 0.
Aleksandar Mitrovic snatched an injury-time winner to lift Fulham back into third place as they saw off Swansea City at Craven Cottage.
Mitrovic headed the only goal from Aboubakar Kamara's cross four minutes into added time as the Whites climbed back above Nottingham Forest in the table.
Only minutes earlier the Serbian striker's penalty had been saved by Swansea goalkeeper Freddie Woodman, after Connor Roberts was adjudged to have fouled Neeskens Kebano.
The Swans, who had battled hard to shackle the Championship's top scorer for much of the game, remain in ninth place, five points off the play-off positions.
Fulham dominated their visitors during the opening 20 minutes, with Ivan Cavaleiro clipping the bar from a corner and Woodman called into action to foil Anthony Knockaert and Bobby Decordova-Reid.
Mitrovic went close to breaking the deadlock in the first half, giving Joe Rodon the slip only to fire over and then swivelling to rifle another volley off target from distance.
Swansea created chances themselves as Andre Ayew rounded Marek Rodak, but was foiled by Denis Odoi's challenge, and Jake Bidwell headed wide from a corner to the near post.
The visitors felt they might have had a penalty after the break when Ayew appeared to be tripped in the box by Odoi, but their appeals were waved away.
Instead, it was Fulham who were awarded a spot-kick in the 88th minute - but Woodman dived to his right to deny a weak effort from Mitrovic and then saved the rebound from Kamara.
However, the home side kept pressing and gained their reward when Kamara supplied a cross from the right and Mitrovic leapt to head in his 23rd league goal of the season.
Fulham head coach Scott Parker told BBC Radio London:
"We didn't get out of jail, I thought we were exceptional from start to finish.
"They came with a little bit of pressure but we moved the ball well, there was an attacking impetus about us and we had a lot of conviction.
"You miss a penalty and you think 'maybe it's not our night' but full credit to my team the commitment they showed, the belief, the mentality and in the end you deserve your moment to win the game."
Swansea City head coach Steve Cooper:
"A last-minute or last-second goal is always a tough one to take but the nature of the decisions that went against us makes it even more frustrating.
"I've no disappointment or frustrations with the players, the opposite actually. They gave everything tonight and for four decisions to go their way and not ours is unacceptable really.
"To lose the game that way on those decisions is just unfair."
- 18ArterSubstituted forMcDonaldat 90+6'minutes
- 24KnockaertSubstituted forKamaraat 83'minutes
- 14De Cordova-Reid
- 19CavaleiroSubstituted forKebanoat 78'minutes
- 43S Sessegnon
- 26NaughtonBooked at 66minsSubstituted forRobertsat 82'minutes
- 6FultonBooked at 54mins
- 18KaluluSubstituted forGarrickat 64'minutes
- 22A AyewBooked at 88mins
- 19BrewsterBooked at 35mins
- Tim Robinson
- Shots on Target
Second Half ends, Fulham 1, Swansea City 0.
Substitution, Fulham. Kevin McDonald replaces Harry Arter.
Goal! Fulham 1, Swansea City 0. Aleksandar Mitrovic (Fulham) header from the centre of the box to the high centre of the goal. Assisted by Aboubakar Kamara with a cross.
Joe Bryan (Fulham) wins a free kick in the attacking half.
Foul by Jordan Garrick (Swansea City).
Tom Cairney (Fulham) wins a free kick in the defensive half.
Foul by Jake Bidwell (Swansea City).
Foul by Aleksandar Mitrovic (Fulham).
Jake Bidwell (Swansea City) wins a free kick in the defensive half.
Attempt saved. Neeskens Kebano (Fulham) left footed shot from the left side of the box is saved in the centre of the goal.
Penalty saved! Aleksandar Mitrovic (Fulham) fails to capitalise on this great opportunity, right footed shot saved in the top left corner.
André Ayew (Swansea City) is shown the yellow card.
Penalty Fulham. Neeskens Kebano draws a foul in the penalty area.
Penalty conceded by Connor Roberts (Swansea City) after a foul in the penalty area.
Offside, Swansea City. Rhian Brewster tries a through ball, but Conor Gallagher is caught offside.
Substitution, Fulham. Aboubakar Kamara replaces Anthony Knockaert.
Substitution, Swansea City. Connor Roberts replaces Kyle Naughton.
Attempt missed. Joe Bryan (Fulham) left footed shot from the left side of the box misses to the right. Assisted by Tom Cairney.
Attempt blocked. Jay Fulton (Swansea City) right footed shot from outside the box is blocked. Assisted by Conor Gallagher.