Toronto came into the game leading the majors with 66 home runs, and the Blue Jays hit six more solo shots Friday. Arizona survived that outburst to win its third straight.
Haran (5-3) went eight innings and gave up four of the homers. He struck out eight and made a major contribution at the plate, driving in two runs with a double in the fourth and adding an RBI double in the sixth.
Adam LaRoche also had a two-run homer for the Diamondbacks in the second, and Chris Young had a solo shot in the seventh.
Encarnacion hit solo homers in the fifth and seventh innings. With Toronto trailing by four heading into the ninth, he hit his third of the night to left off Juan Gutierrez.
Adam Lind hit yet another homer against Gutierrez to trim the Toronto deficit to two runs, and Fred Lewis followed with a double. Chad Qualls was then called on to replace Gutierrez and he got Aaron Hill on a fly ball to center, ending the game.
Qualls earned his eighth save.
The loss went to Brandon Morrow (3-4), who was battered for six runs on eight hits in four innings.