W3C home > Mailing lists > Public > whatwg@whatwg.org > March 2012

[whatwg] RWD Heaven: if browsers reported device capabilities in a request header (Boris Zbarsky)

From: Henri Sivonen <hsivonen@iki.fi>
Date: Fri, 30 Mar 2012 17:18:28 +0300
Message-ID: <CAJQvAufK7yX5bZoL+APs3YR71TJWF-_k7cY6TtV-CPTWfxU6CQ@mail.gmail.com>
On Mon, Feb 6, 2012 at 9:24 PM, Irakli Nadareishvili <irakli at gmail.com> wrote:
> if you don't mind me saying it, I am afraid you may be missing the point of this request. In Responsive Web Design, device capabilities are used in a high-level fashion to determine a class of the device: smartphone, tablet, desktop.

Firefox (at least from version 12 up), Opera Mobile and Safari already
expose this information.

Firefox for tablets includes the substring "Tablet" in the UA string
and Firefox for phones includes the substring "Mobile" in the UA
string.  If neither "Tablet" nor "Mobile" is present in the UA string,
the browser is running on a desktop.

In the case of Opera (excluding Mini), the indicators are "Tablet" and
"Mobi" (and desktop otherwise).

In the case of Safari, if the substring "iPad" is present, it's a
tablet.  Otherwise, if the substring "Mobile" is present, it's a phone
form factor.  Otherwise, its desktop (or a non-Safari browser spoofing
as Safari).

IE differentiates between desktop on the phone form factor as well:
the mobile form factor in closest substring "IEMobile".

Unfortunately, the Android stock browser on Android tablets does not
include a clear tablet indicator.

So you get something like
/**
 * Returns "desktop", "tablet" or "phone"
 * Some 7" tablets get reported as phones. Android netbook likely get
reported as tablets.
 * Touch input not guaranteed on phones (Opera Mobile on keypad
Symbian, for example) and tablets (non-Fire Kindle)!
 */
function formFactor() {
  var ua = navigator.userAgent;
  if (ua.indexOf("Tablet") > -1) {
    // Opera Mobile on tablets, Firefox on tablets, Playbook stock browser
    return "tablet";
  }
  if (ua.indexOf("iPad") > -1) {
    // Safari on tablets
    return "tablet";
  }
  if (ua.indexOf("Mobi") > -1) {
    // Opera Mobile on phones, Firefox on phones, Safari on phones
(and same-sized iPod Touch), IE on phones, Android stock on phones,
Chrome on phones, N9 stock, Dolfin on Bada
    return "phone";
  }
  if (ua.indexOf("Opera Mini") > -1) {
    // Opera Mini (could be on a tablet, though); let's hope Opera
puts "Tablet" in the Mini UA on tablets
    return "phone";
  }
  if (ua.indexOf("Symbian") > -1) {
    // S60 browser (predates Mobile Safari and does not say "Mobile")
    return "phone";
  }
  if (ua.indexOf("Android") > -1 && ua.indexOf("Safari") > -1) {
    // Android stock on tablet or Chrome on Android tablet
    return "tablet";
  }
  if (ua.indexOf("Kindle") > -1) {
    // Various Kindles; not all touch!
    return "tablet";
  }
  if (ua.indexOf("Silk-Accelerated") > -1) {
    // Kindle Fire in Silk mode
    return "tablet";
  }
  return "desktop";
}

Seems like the coarse form factor data is pretty much already in the
UA strings. Things could be improved by Opera Mini, Safari, Amazon's
browsers and Google's browsers saying "Tablet" when on tablet. Symbian
is dead, so no hope for its stock browser starting to say "Mobi".

The inferences you may want to make from the form factor data may well be wrong.

-- 
Henri Sivonen
hsivonen at iki.fi
http://hsivonen.iki.fi/
Received on Friday, 30 March 2012 07:18:28 UTC

This archive was generated by hypermail 2.4.0 : Wednesday, 22 January 2020 16:59:40 UTC