The Cottagers had slid towards the bottom three after winning only one of their previous 12 games but were well worth their second away success of the campaign.
Dimitar Berbatov's seventh goal of the season gave the Cottagers a half-time lead and, although Romelu Lukaku levelled after the break, Kacaniklic restored the visitors' advantage.
Berbatov wasted a golden opportunity for Fulham. A mistake by Chris Brunt left the former Manchester United player with a clear run towards Ben Foster but he shot over the bar.
But Berbatov made amends after 39 minutes by putting Fulham ahead. Ashkan Dejagah turned inside Liam Ridgewell before squaring the ball across the box to the Bulgarian, whose first time shot flew past Foster.
Albion left the pitch at half-time to the sound of boos after a below-par performance. The atmosphere quickly changed with Lukaku needing only three minutes of the second period to bring West Brom level.
Marc-Antoine Fortune spread the ball out wide to Billy Jones, who skipped past Steve Sidwell before centring for Lukaku to make no mistake from close range.
The home side were revitalised and Lukaku held off Aaron Hughes before crashing a rising shot against the outside of a post. Stockdale denied Lukaku and Zoltan Gera in quick succession and the rebound broke to Brunt, whose shot was headed off the line by Hughes.
But after 57 minutes Fulham regained the lead against the run of play through Kacaniklic's third goal of the season.
Bryan Ruiz played a lofted ball forward to Kacaniklic on the edge of the box and he checked back inside before firing home.