St Kilda forward Josh Bruce has kicked a final-minute goal to all-but end Fremantle's final hopes.

The Dockers appeared in the box seat for a September return when they led by nine points in the dying stages at Marvel Stadium on Sunday, but returning star Jack Steven snapped his third goal and Bruce finally hit the scoreboard in emphatic fashion to give the Saints a 10.12 (72) to 10.9 (69) victory.

In a frantic final minute, St Kilda speedster Nick Hind hit a leading Bruce, who coolly converted an otherwise regulation shot from 35 metres.

With just 39 seconds left, Fremantle took the ball forward, but St Kilda youngster Josh Battle took a saving mark that enabled his team to hold on.

Bruce will gain many plaudits for rising to the occasion when it mattered most, but the hero was four-time club champion Steven who, despite appearing a little out of shape, was a firestarter forward of centre in his first game back after a mental health break. He could easily have put the Saints in front late, but his long running shot missed everything.

The Saints were also well served by midfielders Seb Ross and Jack Billings, while Shane Savage and Jake Carlisle were solid in defence.

Fremantle skipper Nat Fyfe almost willed team his over the line with a brilliant 35-disposal two-goal display, while Bradley Hill and Ed Langdon were also prolific, creative runners.

It wasn't the most aesthetically pleasing contest with poor decision making and poor skill execution the order of the day, particularly in the first half, but it was an enthralling one nonetheless.

Freo was fresh from conjuring a surprise belting of league leader Geelong in Perth, but little of that form was evident early as the Saints burst out of the blocks with dash and dare to rack up 11 of first 12 forward entries to lead 3.1 to 0.1.

The return of Dan Hannebery (for just his third AFL game this season) and Steven proved significant with both prominent early, Hannebery slotting back-to-back opportunist goals – the ex-Swan's first majors for the club – via crafty snaps.

All was going swimmingly for the seasiders before they endured a horror latter part of the first quarter when they were disadvantaged by three players leaving the field for treatment in quick succession. Young defender Nick Coffield copped a dislocated right shoulder and didn't return, while ruckman Rowan Marshall seemed to suffered a serious left knee injury after landing awkwardly in a marking contest but made a miraculous recovery to play out the game. Bruce needed treatment for a facial cut.

Fyfe dragged his team back into the contest, driving the Dockers to six of the next eight goals to lead by seven points late in the second term. By half-time, the powerful midfielder had amassed 21 possessions and two of Freo's goals, the second of which gave it the lead for the first time.

A kicking clanger from second-game Docker Jason Carter gifted the Saints a late goal to Luke Dunstan and the Saints grabbed a one-point advantage at the long break.

Five goals were scored in the third term – three to Freo and two to St Kilda – and the lead changed each time. The last of these goals, to Dockers youngster Lachie Schultz, raised the ire of Saints fans after Freo veteran David Mundy was tackled by the shorts for a seeming eternity.

The Dockers led by seven points at three-quarter time, and the next goal wasn't scored until 18 minutes into a desperate final term when Fremantle small forward Brandon Matera had his team's first scoring shot for the quarter, nailing a long set shot.

Steven's snap inside the final two minutes then set the stage for Bruce's heroics.

ST KILDA          4.3  6.5  8.7  10.12 (72)
2.3  6.4  9.8  10.9 (69)

St Kilda:
Steven 3, Hannebery 2, Membrey 2, Dunstan, Battle, Bruce
Fremantle: Fyfe 2, Matera 2, Walters, Darcy, Switkowski, Crowden, Langdon, Schultz

St Kilda:
Ross, Billings, Hannebery, Steven, Savage, Carlisle
Fremantle: Fyfe, Langdon, Hill, Blakely, Tucker, Duman

St Kilda:
Coffield (right shoulder)
Fremantle: TBC

Reports: TBC

Umpires: Dalgleish, Gavine, Glouftsis

Official crowd: 17,715 at Marvel Stadium