Fremantle led by 26 points at quarter-time, but was hauled in by the Roos, who held a slender one-goal lead 15 minutes into the last quarter and managed to hold on for the 14.14 (98) to 12.13 (85) win despite the best efforts of the visitors.
Paul Hasleby was gallant for Fremantle with 26 possessions and two goals with Garrick Ibbotson (24), Stephen Hill (21) and Matthew Pavlich (18 disposals and three goals) also prominent. Aaron Sandilands finished with 43 hit-outs.
Brady Rawlings led the Kangaroos' possession winners with 24 with Adam Simpson (23), Michael Firrito (22) and Drew Petrie (16) all influential.
Fremantle's task was not made any easier by the loss of Roger Hayden midway through the third quarter with a calf injury.
Leigh Harding kicked the first goal of the game for the Kangaroos, but Fremantle soon established an ascendancy around the stoppages and kick-started its running game.
Luke McPharlin, who finished with four majors, and Pavlich followed Hasleby's opener with goals of their own to give their team a handy lead. Despite Ben Warren booting his first the visitors continued to look the better side.
Brett Peake converted from long range before Pavlich added his second and when Hayden converted a set shot late it set up an impressive 26-point lead at the first change.
A sea change came over the contest in the second term as the Roos mounted the inevitable charge.
Petrie started up forward, but was switched onto a wing and was important in the comeback. The Kangaroos slammed on the first three goals of the quarter to slash the margin before McPharlin managed a major against the run of play.
The Roos took the lead midway through the term, but it was only for a brief time as Fremantle settled and finished strongly.
McPharlin scrambled through his third and Hasleby added his second, but David Hale put through a free kick from close range with seconds remaining in the half to bring Fremantle's lead back to just five points.
The game developed into more of an arm wrestle as the second half got underway with scoring drying up for both sides.
Fremantle managed to hang onto a lead by seven points or less for most of the quarter, but Aaron Edwards drew the scores level after he converted a free kick when Steven Dodd was adjudged to have deliberately rushed a behind.
Sam Wright and Todd Goldstein both goaled as the Kangas picked up the pace leaving Fremantle to work on a 13-point deficit in the final term.
Hale booted his fourth inside the first minute of the last quarter, but Pavlich and McPharlin slashed the margin to one straight kick to set up the thrilling finale.
The ball spent plenty of time in Fremantle's forward 50 as the clock ticked down, but no one was able to convert to tie the scores. Hale finally put the game beyond Freo's reach with his fifth inside the last minute.
North Melbourne 2.3 8.8 12.11 14.14 (98)
Fremantle 6.5 9.7 10.10 12.13 (85)
GOALS
North Melbourne: Hale 5, Warren 2, Goldstein, Edwards, Wright, Petrie, Harding, Wells, Rawlings
Fremantle: McPharlin 4, Pavlich 3, Hasleby 2, Hayden, Headland, Peake
BEST
North Melbourne: Petrie, Hale, Gibson, Rawlings, Harding, Firrito, Urquhart
Fremantle: Hasleby, Pavlich, Ibbotson, Sandilands, McPharlin, Hill, Dodd
INJURIES
North Melbourne: TBA
Fremantle: Hayden (calf)
Reports: Nil
Umpires: McBurney, Stewart, Nicholls
Official crowd: 15,436 at Docklands
The views expressed in this article are those of the author and not necessarily those of the club