Harris hit his slam off reliever Neal Cotts to cap a six-run sixth inning that put the Nationals ahead 6-4. He added a two-run shot in the ninth off Chad Gaudin for his first multihomer game in the majors.
The Nationals ended their long losing streak Thursday night in Philadelphia and reached their Chicago hotel at 1:45 a.m. On a muggy day at Wrigley Field, they didn't play like a tired team.
Lefty John Lannan (7-12) allowed seven hits and five runs in 6 1-3 innings to beat the Cubs for the second time this season.
Washington's Ronnie Belliard had four hits, including his 11th homer, and pinch-hitter Aaron Boone hit a three-run double.
Working on nine days' rest, Chicago starter Jason Marquis took a 4-0 lead into the sixth. He ran into trouble as a single by Emilio Bonifacio and walks to Cristian Guzman and Ryan Zimmerman loaded the bases with no outs.
Lastings Milledge hit a sacrifice fly and Belliard had an RBI double to slice the lead to 4-2 and finish Marquis. Pinch-hitter Austin Kearns worked a walk from Cotts (0-2) to reload the bases and Harris hit a drive over the right-field wall for his 11th home run.
Boos came down from the crowd of 40,513 as the Cubs came off the field after the Nationals' big inning.
Harris wasn't through. He fielded Mark DeRosa's liner as it bounced off the left-field wall in the bottom half and made a strong throw to second to nail him.
Guzman added an RBI single in the seventh. Chicago cut it to 7-5 in the bottom half on Ryan Theriot's two-out RBI single off reliever Steven Shell.