Under the Marvel Stadium roof on Friday night, the Dockers were in danger of their third-lowest score before a late goal as the Saints dominated, winning 14.10 (94) to 5.3 (33).
Saints forward Cooper Sharman equalled his career-best haul of four goals and at three-quarter time he led Fremantle by himself with his 3.1 to their 2.2.
Sharman kicked three goals in the third term, the last a miracle snap over his shoulder from a pocket.
He mimicked Brisbane great Jason Akermanis, putting one hand on his head and the other over his mouth after the freak goal.
Sharman should have had a fourth for the third quarter but missed an easy set shot soon before the last break.
He kicked his fourth in the final term, equalling his caree-best haul.
Despite the benign conditions under the roof, Fremantle managed only 1.1 in the first half.
It was their third-lowest score in a first half, and their lowest against the Saints.
After he felt coach Ross Lyon's wrath and was notably subbed out early in the second term of last week's loss to Brisbane, Saints youngster Hugo Garcia played out the game and kicked a final-quarter goal.
St Kilda suffered a pre-game blow when young gun Mattaes Phillipou was a late withdrawal.
Phillipou was included for his first game this season after recovering from a leg injury, but suffered a knock to his leg at Wednesday training and did not recover in time.
Dockers coach Justin Longmuir had warned against a "punch in the face", given St Kilda had lost their past three games.
The last time Fremantle played in Melbourne a fortnight ago, they suffered an upset loss to the Demons. It was Melbourne's first win of the season after an 0-5 start.
Fremantle were not so much punched as strangled, with St Kilda's pressure relentless.
Brad Hill kicked the Saints' opening goal after a minute and his side led by eight points at the first break.
Teammate Dougal Howard left the field in the first term complaining of groin soreness, but was able to return.
Fremantle's Hayden Young hobbled off in the second quarter and was subbed out of the game with a hamstring injury.
St Kilda's Liam Stocker was also taken off in the second term due to concerns over a head knock, but was able to continue.