Off-spinner Swann took 2-38 and paceman Broad 2-37 before Bangladesh posted 172-6 in their second innings at stumps on the penultimate day in Dhaka. They were just 95 ahead, having conceded a 77-run lead.
England were earlier bowled out for 496 in their first innings in reply to Bangladesh's 419, with Tim Bresnan (91) missing out on a maiden Test century.
Skipper Shakib Al Hasan was unbeaten on 25 at close with Shafiul Islam, who was yet to open his account.
"It would have been nice in my second Test innings to get a hundred but hopefully I'll get a lot more opportunities to score a century in a Test. It's the contribution to the team that I'm more happy with," said Bresnan.
"I think four quick wickets tomorrow and we chase 150 and win, that's how I see it. We've managed to get in front on a slow scoring wicket and I feel we've set it up perfectly for a win tomorrow."
England did not allow the hosts to build a big partnership despite missing chances. Bangladeshi opener Tamim Iqbal (52), debutant Jahurul Islam (43) and Junaid Siddique (43) failed to convert their starts into big knocks.
He fell after completing his second successive half-century, caught by Broad off Swann after hitting five fours.
Jahurul, who failed to score in the first innings, hit two sixes and five fours before being bowled by Swann in the last session.
His first two scoring shots in Test cricket were sixes as he hoisted Swann and Tredwell over long-on, but he also gave a couple of chances.
Swann failed to hold on to a low return catch when Jahurul was on six and then the newcomer edged Tredwell between wicket-keeper and slip for a four.
"We should not look for runs and rather concentrate on surviving the first two sessions. If we don't lose any wicket until lunch it would be good for us," said Jahurul.
"I could have played a big innings easily. I should have been more careful at that time and stopped playing shots, but I was a bit excited since it was my first match."
Siddique was unlucky to be dismissed in the penultimate over of the second session. He firmly drove Tredwell, but the ball hit skipper Alastair Cook's boot at silly-point before going to the bowler, who took the catch.
Bangladesh lost opener Imrul Kayes in the morning, but Tamim and Siddique steadied the innings with a 63-run stand for the second wicket.
Kayes (four) was bowled by Broad, the ball hitting the thigh pad before deflecting on to the leg-stump. The England paceman got his second wicket when he bowled Mushfiqur Rahim (three).
England added 56 to their overnight total of 440-8 to extend their lead.
Bresnan, batting in only his second Test innings, added 17 to his overnight score of 74 before being stumped off spinner Abdur Razzak. He hit six fours in a 261-ball knock.
England lead the series 1-0 following their 181-run win in the opening Test in Chittagong.
Source: AFP South Asian Edition