SAN FRANCISCO -- Brandon Webb went after Barry Bonds one inning and walked him the next, then went after him again. Whatever the approach against San Francisco's slugger, Webb seems to be doing everything right these days.
For one thing, he avoided becoming the 419th pitcher to surrender a homer to Bonds.
Webb won his fourth consecutive start and the Arizona Diamondbacks prevented a three-game sweep with an 8-2 victory over the San Francisco Giants on Sunday.
"With Bonds, you just try to keep the ball down, and in the park," Webb said. "He may have bad knees but he can still swing the bat. ... It seems like April is a fairly good month for me. I'm feeling pretty fresh."
He was helped by Arizona's productive offense, including Johnny Estrada going 4-for-4 with a two-run homer and four RBI. The Diamondbacks finished a 5-4 trip by winning the finale in San Francisco after having swept the Padres in San Diego.
Bonds doubled in a run in the seventh for his 1,357th extra-base hit, moving past Babe Ruth and into sole possession of third place.
Stan Musial is next at 1,377 and home run king Hank Aaron is the leader with 1,477.
Webb (4-0) held Bonds at 711 home runs -- three from tying Ruth for second place.
"I thought he'd probably have done it by now," Giants manager Felipe Alou said. "It's probably going to have to wait another week or 10 days."
Bonds received a loud, standing ovation moments before he stepped into the batter's box in the first inning with runners on first and second and one out.
He struck out swinging on a 10-pitch at-bat in which he fouled off four pitches. Kevin Frandsen was caught stealing at third for an inning-ending double play after he apparently thought Bonds had received ball four.
Bonds discussed the call with plate umpire Ramon Armendariz and so did manager Felipe Alou. Bonds also questioned third-base umpire Laz Diaz, who ruled that Bonds went around.
"That was kind of a weird turn of events," said Estrada, Arizona's catcher. "I just came up throwing to third because I assumed it would be called a strike. I didn't see him punch out Barry, I saw him make the call at third. I thought the pitch was a strike. I heard Barry say 'You've got to be kidding me.'"
The seven-time NL MVP came up with the bases empty with two outs in the fourth and walked on five pitches as fans booed.
Alou was pleased with the first month for Bonds, who batted .277 in April with three home runs and 10 RBI while drawing 26 walks -- 12 intentional.
"I expected more or less a month like that," Alou said. "We got him through healthy, healthy enough to play the first of May. That was a good month. Not a lot of home runs, but a lot of (RBI) and a lot of walks."
With two outs in the second, Estrada hit the first pitch he saw from Matt Cain into the right-field arcade for his third home run of the year and second of the trip. He has hit safely in nine of his last 12 games, batting .375 (15-for-40) with three homers and 12 RBI during that stretch.
Estrada added run-scoring singles in the fourth and sixth innings.
Eric Byrnes had an RBI triple and Chad Tracy hit a two-run double for Arizona.
After Webb allowed Randy Winn's first-inning single, he retired 16 of his next 17 batters and didn't allow another hit until Winn's leadoff triple in the seventh. Webb, who entered the season with a three-game losing streak against San Francisco, beat the Giants for the second time in 11 days. He allowed two runs and five hits in eight innings, struck out five and walked one. He also singled leading off the seventh and added a sacrifice fly in the eighth.
Steve Finley added a pinch-hit triple in the eighth for the Giants, his fourth of the year and the most he's had in a season since hitting 10 for the Diamondbacks in 2003. Omar Vizquel followed with a sacrifice fly.
Cain (1-3) made another solid start after beating the Mets last Monday. He struck out five, walked two and allowed five hits in six innings.
"I gave Estrada too many pitches to hit," Cain said.
Cain earned his first big league victory against the Diamondbacks last Sept. 4. ... Byrnes started for the second consecutive day in CF for Jeff DaVanon after getting a hit and driving in a run Saturday. ... Bonds drew his 26th walk of the year. ... Shawn Green has a six-game hitting streak. ... Giants 1B Lance Niekro sat out with a head cold a day after hitting a tying RBI single in the seventh. Mark Sweeney played in Niekro's place for his first start since April 19 at Arizona and seventh overall. Sweeney, who has been nursing a hamstring injury, committed a two-base fielding error in the sixth that allowed Luis Gonzalez to reach second. ... Bonds' 10-pitch at-bat was his longest pitch sequence of the season by three. ... Frandsen was plunked for the third game in a row after making his major league debut Friday. ... Giants RF Moises Alou gave his team a scare when he pulled up after grounding into a ninth-inning double play. But it wasn't his calf as initially feared. "I just felt a little twinge in my left hip. I've never had that before," Alou said. "I felt it and I slowed down. I probably need a day or two off."