# How do I detect type of operating system

**URL:** <https://discourse.nodered.org/t/how-do-i-detect-type-of-operating-system/10093>\
**Category:** Dashboard\
**Created:** [13 April 2019 08:01 UTC](https://discourse.nodered.org/t/how-do-i-detect-type-of-operating-system/10093 "2019-04-13T08:01:32Z")\
**Posts on this page:** 7\
**Page:** 1

<div class="post-metadata">

**Author:** ![Dave](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/dave/32/10827_2.png) [@Dave](https://discourse.nodered.org/u/Dave)\
**Post date:** [13 April 2019 08:01 UTC](https://discourse.nodered.org/t/how-do-i-detect-type-of-operating-system/10093/1 "2019-04-13T08:01:32Z")

</div>

I have a permanent android tablet which displays my dashboard, its based on a grid size of 18x12, it works fine however, some times I want to access this dashboard on my iphone 6x12 most of the dashboard looks ok because the android 18 wide grid size is split into sub grids of 6 wide but I have some screens showing video feeds are the full 18 wide by 11 + a singe row of buttons, obviously this does not work well on the iphone and its unusable because I have swipe enabled to move from screen to screen so trying to horizontal scroll is almost impossible.

I know I can use show and hide to get over this like show 18x12 view and hide 6x4 view or visa versa but I would like to try to automate this by detecting if the dashboard is to be or has been opened on the iphone or android tablet.

Some googling, the most popular response to this question on stack overflow seams to be the following code, but were would I put this User Agent code ?

Please advise thanks.

```auto
/**
 * Determine the mobile operating system.
 * This function returns one of 'iOS', 'Android', 'Windows Phone', or 'unknown'.
 *
 * @returns {String}
 */
function getMobileOperatingSystem() {
  var userAgent = navigator.userAgent || navigator.vendor || window.opera;

      // Windows Phone must come first because its UA also contains "Android"
    if (/windows phone/i.test(userAgent)) {
        return "Windows Phone";
    }

    if (/android/i.test(userAgent)) {
        return "Android";
    }

    // iOS detection from: http://stackoverflow.com/a/9039885/177710
    if (/iPad|iPhone|iPod/.test(userAgent) && !window.MSStream) {
        return "iOS";
    }

    return "unknown";
}

```

---

<div class="post-metadata">

**Author:** ![TotallyInformation](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/totallyinformation/32/31_2.png) [@TotallyInformation](https://discourse.nodered.org/u/TotallyInformation)\
**Post date:** [13 April 2019 16:04 UTC](https://discourse.nodered.org/t/how-do-i-detect-type-of-operating-system/10093/2 "2019-04-13T16:04:17Z")

</div>

This code has to run in the client (front-end) browser. So you need to send it to the browser using a Dashboard template node with `<script></script>` tags.

Of course, you also need to trigger the code which means that you need a way to trigger it when the page first loads.

> **[Document: DOMContentLoaded event](https://developer.mozilla.org/en-US/docs/Web/API/Document/DOMContentLoaded_event)**
>
> The DOMContentLoaded event fires when the initial HTML document has been completely loaded and parsed, without waiting for stylesheets, images, and subframes to finish loading.

---

<div class="post-metadata">

**Author:** ![Dave](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/dave/32/10827_2.png) [@Dave](https://discourse.nodered.org/u/Dave)\
**Post date:** [13 April 2019 16:20 UTC](https://discourse.nodered.org/t/how-do-i-detect-type-of-operating-system/10093/3 "2019-04-13T16:20:24Z")

</div>

Thanks for your response, I have been messing with this for a few hours and the following code in a template node prints the platform type to the dashboard as soon as I load my dashboard

like win32 when I log on to the dashboard in windows  
iphone for iphone  
ipad for ipad  
Linux armv7| for android tablet (not sure why it doesn't say android but it doesn't matter)

anyway the bit I am struggling with is how to get the code to send the result as a msg.payload to the output of the template node please help thanks

---

<div class="post-metadata">

**Author:** ![Dave](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/dave/32/10827_2.png) [@Dave](https://discourse.nodered.org/u/Dave)\
**Post date:** [13 April 2019 16:26 UTC](https://discourse.nodered.org/t/how-do-i-detect-type-of-operating-system/10093/4 "2019-04-13T16:26:46Z")

</div>

![image](https://us1.discourse-cdn.com/flex026/uploads/nodered/original/2X/0/0a2118ad870475d6eec29605242d01e24a8d8ad6.png)

---

<div class="post-metadata">

**Author:** ![Dave](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/dave/32/10827_2.png) [@Dave](https://discourse.nodered.org/u/Dave)\
**Post date:** [13 April 2019 17:50 UTC](https://discourse.nodered.org/t/how-do-i-detect-type-of-operating-system/10093/5 "2019-04-13T17:50:46Z")

</div>

Ok think I have it ...

![image](https://us1.discourse-cdn.com/flex026/uploads/nodered/original/2X/c/c94ded3da5e4846571a87e2953a8d04792d1d660.png)

---

<div class="post-metadata">

**Author:** ![dceejay](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/dceejay/32/38_2.png) [@dceejay](https://discourse.nodered.org/u/dceejay)\
**Post date:** [13 April 2019 18:10 UTC](https://discourse.nodered.org/t/how-do-i-detect-type-of-operating-system/10093/6 "2019-04-13T18:10:27Z")

</div>

You should only need the script tag part

---

<div class="post-metadata">

**Author:** ![harlybake](https://avatars.discourse-cdn.com/v4/letter/h/f475e1/32.png) [@harlybake](https://discourse.nodered.org/u/harlybake)\
**Post date:** [11 June 2020 05:34 UTC](https://discourse.nodered.org/t/how-do-i-detect-type-of-operating-system/10093/7 "2020-06-11T05:34:00Z")

</div>

If you wanna detect all mobile devices [operating system](http://net-informations.com/js/iq/os.htm) including blackberry and Windows phone then you can use this comprehensive version:

```auto
var deviceIsMobile = false; //At the beginning we set this flag as false. If we can detect the device is a mobile device in the next line, then we set it as true.

if(/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|ipad|iris|kindle|Android|Silk|lge |maemo|midp|mmp|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|phone)|xda|xiino/i.test(navigator.userAgent) 
    || /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(navigator.userAgent.substr(0,4))) {
   deviceIsMobile = true;
}

if(deviceIsMobile){
    // run your code here
}

```
