SEATTLE -- C.J. Wilson brought his A game to Safeco Field on Friday night and pitched his third complete game of the season.

But Mariners starter Felix Hernandez was A-plus for eight innings and the Rangers saw their seven-game winning streak come to an end.

Hernandez had a no-hitter for seven innings before giving up a leadoff home run to Nelson Cruz in the eighth, as the Mariners held on to a 2-1 victory over the Rangers at Safeco. With Oakland beating Minnesota, the Rangers now have a nine-game lead in the American League West with 16 to play. Their magic number remains eight.

Hernandez ended up with a three-hitter as the Rangers had runners on second and third with two out in the eighth. Hernandez escaped by getting Elvis Andrus on a grounder to short and David Aardsma retired the side in order in the ninth for the save.

"Felix is always tough, but even by his standards he was really good tonight," third baseman Michael Young said. "His off-speed stuff was rolling. He had a good hook and a really good changeup."

Hernandez was 0-3 with a 6.38 ERA in four starts against the Rangers this season before dominating them on Friday night.

"I've seen him a lot, and he's good, but tonight he was outstanding," Rangers manager Ron Washington said. "He had a good changeup, good sink, worked fast, hit his spots and pounded the strike zone. It was outstanding."

Wilson was almost as good, but the Mariners, the lowest scoring team in the Major Leagues, manufactured a couple of runs early and Hernandez made them stand up. Seattle scored one run on a wild pitch in the second inning and another in the third on an RBI single by Chone Figgins.

Catcher Bengie Molina praised Wilson's work and blamed himself for the two runs.

"I screwed up his game," Molina said afterwards. "I didn't block a ball I should have, and I called a terrible pitch on Figgins. That's what I did tonight.

The Mariners also stole five bases combined in the second and third innings to help manufacture the runs.

Franklin Gutierrez, who led off the second with an infield single, was on second with two outs when he decided to steal third base. That's not usually encouraged with two outs, but this time it proved to be crucial because it put Gutierrez in position to score on a wild pitch. Wilson was ahead 1-and-2 on Michael Saunders, but bounced a changeup that got through Molina's legs, allowing Gutierrez to score.

"The ball, instead of bouncing up, stayed down," Molina said. "I've got to get the glove down."

In the third, Wilson gave up a one-out single to Ichiro Suzuki, who then stole second and third. The Rangers brought the infield in, but Figgins lined a single to center to bring home the run.

That was it for the Mariners. Wilson went eight innings, allowing just six singles and three walks while striking out six. Three of the six singles were infield hits. Wilson is now 14-7 with a 3.21 ERA after 30 starts on the season, and has three of the Rangers seven complete games.

"C.J. pitched a great game," Molina said. "He battled, he mixed up a lot of pitches and kept them off-balance. He only gave up two runs, but it should have been one. He still pitched a great game."

Just not as good as the other guy. Hernandez began the night by walking Andrus, and then retired 21 straight hitters. By the eighth inning, a crowd of 19,032 was ready to witness a no-hitter. The Rangers had other ideas.

"We weren't sitting around thinking about being no-hit," Washington said. "We were thinking about scoring runs and winning the game."

They almost did as Cruz hit the second pitch of the eighth inning deep over the center-field fence to end the no-hitter and the shutout.

"Fastball away and I squared him up pretty good." Cruz said.

Hernandez retired Ian Kinsler on a fly to right, but Mitch Moreland and Chris Davis -- pinch-hitting for Molina -- both singled, putting runners on first and second. But Hernandez got Julio Borbon to pop up and -- after Davis and pinch-runner Esteban German worked a double steal -- Andrus grounded to short to end the inning.

"We got to him a little bit in the eighth and got his pitches up," Washington said. "We had our chance, we had two shots at him, but he was good."

Andrus entered the game hitting .382 with runners in scoring position, the highest in the American League. But this night belonged to Hernandez.

"As soon as that was hit, you knew [Cruz's ball] was gone," Mariners catcher Adam Moore said. "He got every bit of it. But, oh well. You gotta continue what you do, and had to keep going. He gave up another couple of hits, but nothing was getting in front of him tonight [as far as] winning the game."