Skipper Chris Gayle and Ramnaresh Sarwan hit centuries as West Indies edged into a 34-run lead, with three wickets remaining, at stumps on the third day of the first Test in Kingston.
Sarwan hit the top score of 107 and Gayle, 103, his first Test century on his home ground, to help their side reach 352 for seven, replying to England's first innings total of 318, at close of play at Sabina Park on Friday.
England appeared to have control of the match, when they removed World Cricketer of the Year Shivnarine Chanderpaul about 15 minutes before tea to leave West Indies on 254 for five.
But they again met resistance in the form of a sixth-wicket stand of 66 between Brendan Nash and Denesh Ramdin.
Ramdin was one of two wickets England claimed in the final session, when he became Monty Panesar's first wicket in the 37th of the left-arm spin bowler's 45 overs, leaving Nash to shepherd the tail until the close with 47 not out.
Stuart Broad was England's most successful bowler with three wickets for 61 runs from 24 overs, and Andrew Flintoff supported with two for 57 from 27 overs.
"It means a lot to me to score my first century on my home ground. It's just unfortunate I couldn't carry on," said Gayle. "It will be nice to get a lead of at least 60 on this pitch. Hopefully, the spinners can come into play for us."