How to detect only Microsoft Surface tablets using javascript / jQuery?

detect touch device javascript
javascript detect touch or mouse
javascript detect hover support
ontouchstart' in window

Can anyone please assist me in detecting "Microsoft Surface" tablets, using javascript / jQuery? I need to add / remove certain js & css to / from my web pages, when the page opens in Surface tabs only? I have searched many forums, but not received any concrete solutions yet. Many thanks in advance!

this code returns true on Surface, Edge browser

    if (window.navigator.pointerEnabled && navigator.maxTouchPoints > 1) {
        ...your function goes here...

you should use maxTouchPoints > 1, because chrome returns "1" on a desktop. However, browsers on touch devices returns 10

Using the navigator object you can access these data fields navigator.appName <- gets app name may be misleading so also get the  Surface is a touch device maybe with a mouse maybe with a real keyboard with whatever browser the user installed and launched (I use Fx). There are tons of hybrid PCs (desktops and laptops with a touch screen) where Touch Events will probably return true but it isn't a Surface.

The following link should possible give you an idea on how to sniff on what you want.

JavaScript Window Navigator

Hope this is help full to you.

If you ask stack overflow “how to detect touch with JavaScript” you'll get a using a mouse plugged into an Android tablet/laptop thingy, resting on their slender, elegant finger on a 13" iPad; using the pen on a Surface Pro. A protip by 2fdevs about mobile, javascript, and detection. Surface Pro 1 isn't considered mobile, despite the changes of screen orientation.. Chrome: Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.101 Safari/537.36

Seeing as the surface is just a windows machine with touch enabled, I am using this to detect it:

if (window.navigator.msPointerEnabled && navigator.msMaxTouchPoints > 0) {
  // functions here

While there are many JavaScript libraries such as Modernizer, jQuery, etc, that are msMaxTouchPoints: Same as above, just with vendor prefix “ms” to target  Notice, they are both the same. If you do detect the Microsoft Surface as a tablet, when the user switches their tablet to desktop mode, it will still be recognized as a tablet, when it probably should respect the users decision and recognize it as a desktop.

I'm using combination of the regex from to detect none mobile browser and ontouchstart/maxTouchPoints to check it is touch enabled device.

window.is_touch_device = 'ontouchstart' in window || navigator.maxTouchPoints;

window.is_mobile_browser = false;

(function(a,b){if(/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(a)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(a.substr(0,4)))window.is_mobile_browser=true;})(navigator.userAgent||navigator.vendor||window.opera,'');

if( !window.is_mobile_browser && window.is_touch_device )
    window.is_ms_surface = true;
    window.is_ms_surface = false;

I just tested on a Windows Surface RT, your demo does not work http://​​javascript Of course, you will also need to load the jQuery library for that. I've tested it on a Microsoft Surface 3 with Microsoft Edge and Internet Explorer  Teams. Q&A for Work. Stack Overflow for Teams is a private, secure spot for you and your coworkers to find and share information.

Below is the detection code used in our projects.

function isSurface() {
  const isWindows = navigator.userAgent.indexOf('Windows') > -1;
  const maxTouchPoints = navigator.maxTouchPoints || navigator.msMaxTouchPoints;
  const isTouchable = 'ontouchstart' in window
    || maxTouchPoints > 0
    || window.matchMedia && matchMedia('(any-pointer: coarse)').matches;

  return isWindows && isTouchable;

Here is a minified jQuery snippet that you can use to detect if your user is I've included a collection of JavaScript snippets below which can be used to detect -8]|c))|phil|pire|pl(ay|uc)|pn-2|po(ck|rt|se)|prox|psio|pt-g|qa-a|qc(07|12|21|32|60| Ok. When did a code editor from Microsoft become kinda cool!? Most common issues can be solved by running the Surface Diagnostic Tool. Before you start a service order, download and run the tool on your Surface. Download the Surface Diagnostic Tool. Last Updated: Mar 1, 2018. Need more help? Email this article. Subscribe RSS Feeds. Copy URL into your reader. Was this information helpful?

Files can be uploaded using a cloud-based file storage service and easily accessed in a hierarchy depending on their position and may use colour to identify a 183 JavaScript 183 joint photography experts group (JPG) 87 jQuery 72, 183 98 localization 124, 184 logographic 122, 184 Macallan Microsoft Surface 174,  For more info about the Surface MSI naming convention, see Deploy the latest firmware and drivers for Surface devices. If there's not an .msi file that corresponds to the build of Windows 10 you have installed, select the .msi file that's closest to (but still lower than) your build number.

Well organized and easy to understand Web building tutorials with lots of examples of how to use HTML, CSS, JavaScript, SQL, PHP, Python, Bootstrap, Java  See things only on your Surface display. PC screen only: See the same things on both your Surface display and on the TV, monitor, or projector. To learn more about screen resolutions, go to Solution 6. Duplicate: Move what's on the screen across your Surface display and onto the TV or monitor screen.

Once upon a time, most developers used jQuery to animate things in the browser. Declaring your animations in CSS allows the browser to determine which elements So the GPU speed boost is not just for CSS animations – JavaScript CSS animations (by a wide margin in some cases, like on the Microsoft Surface RT  Fold the Type Cover back behind the screen to use your Surface as a tablet. Your Surface won’t detect key presses while it’s folded. To type text while the Type Cover is folded, tap the screen anywhere you can type and the touch keyboard appears.

  • Possible Duplicate of What is the user agent string for surface rt?
  • I am also looking for the same thing did you get any solution ?
  • Is not that embracing a large amount of devices rather than just Surfaces?