No jalopy browsers. Detect old browsers and serve static page

Hey, I want to detect old browsers and give them a static page saying “upgrade your browser”.

I don’t have the time to go all crazy with feature detection. This package is interesting but won’t work, and it’s client side.:

I’d like to do something serverside like this: https://www.npmjs.com/package/oldbrowser

What’s the best way?

Thanks!

1 Like

Meteor exposes the connect API through WebApp.connectHandlers, you can use that to add the browser restrictions (make sure you add to the top of the stack). We used this approach for a package that implements basic auth for our QA deployments, it should be fairly straight-forward if you use that as a template.

2 Likes

Ah! That’s exactly what I was looking for. Thanks!

I ended up with this:

Meteor.startup(function () {
  var stack;

  // Add handler
  WebApp.connectHandlers.use(function (req, res, next) {
    var jalopy = false;

    var bowser = Meteor.npmRequire('bowser');
    bowser = bowser._detect(req.headers['user-agent']);
    bowser.majorVersion = parseInt(bowser.version);

    if (bowser.msie && bowser.majorVersion < 11) jalopy = true;
    if (bowser.safari && bowser.majorVersion < 9) jalopy = true;

    if (jalopy) {
      res.statusCode = 307;
      res.setHeader('Location', '/old-browser.html');
      res.end();
    } else {
      next();
    }
  });

  // Move handler to the top of the stack
  stack = WebApp.connectHandlers.stack;
  stack.unshift(stack.pop());
});
2 Likes