# How to determine if browser or app

**URL:** <https://forum.ionicframework.com/t/how-to-determine-if-browser-or-app/89149>\
**Category:** ionic-v3\
**Created:** [May 6, 2017, 4:27am UTC](https://forum.ionicframework.com/t/how-to-determine-if-browser-or-app/89149 "2017-05-06T04:27:35Z")\
**Posts on this page:** 20\
**Page:** 1

<div class="post-metadata">

**Author:** ![beck24](https://sea1.discourse-cdn.com/ionicframework/user_avatar/forum.ionicframework.com/beck24/32/112174_2.png) [@beck24](https://forum.ionicframework.com/u/beck24)\
**Post date:** [May 6, 2017, 4:27am UTC](https://forum.ionicframework.com/t/how-to-determine-if-browser-or-app/89149/1 "2017-05-06T04:27:35Z")

</div>

I have some elements I want to show only if the page is viewed via browser (desktop or mobile browser), but not if viewed from within the app as installed via app store/google play.

From the docs: [https://ionicframework.com/docs/api/platform/Platform/](https://ionicframework.com/docs/api/platform/Platform/)  
I assumed I could use:  
`this.platform.is('core') || this.platform.is('mobileweb')`

This works fine for desktop browsers, however on chrome and the default android browser it acts just like the app - the detected platforms are identical as [‘cordova’, ‘android’, ‘mobile’]

I understand the app itself is a browser, but I was under the impression ‘mobileweb’ would be the difference and it’s not. Any way to properly determine if I’m in a native browser or in the app?

---

<div class="post-metadata">

**Author:** ![Codelives](https://sea1.discourse-cdn.com/ionicframework/user_avatar/forum.ionicframework.com/codelives/32/108311_2.png) [@Codelives](https://forum.ionicframework.com/u/Codelives)\
**Post date:** [May 6, 2017, 4:43am UTC](https://forum.ionicframework.com/t/how-to-determine-if-browser-or-app/89149/2 "2017-05-06T04:43:53Z")

</div>

because core only detect if you are using a windows browser opening the application, but if you are using chrome mobile emulation, core will return false, but mobileweb will return true. Therefore you should use the following:

```auto
if(this.platform.is('core') || this.platform.is('mobileweb')) {
  this.isApp = false;
} else {
  this.isApp = true;
}

```

---

<div class="post-metadata">

**Author:** ![beck24](https://sea1.discourse-cdn.com/ionicframework/user_avatar/forum.ionicframework.com/beck24/32/112174_2.png) [@beck24](https://forum.ionicframework.com/u/beck24)\
**Post date:** [May 6, 2017, 4:46am UTC](https://forum.ionicframework.com/t/how-to-determine-if-browser-or-app/89149/3 "2017-05-06T04:46:27Z")

</div>

That’s what I’m using, but it’s failing for Chrome on android, and the default android browser. ‘mobileweb’ is not in the platforms array, nor is ‘core’. The platforms array is ‘cordova’, ‘android’, and ‘mobile’ which is the same as the app.

---

<div class="post-metadata">

**Author:** ![Codelives](https://sea1.discourse-cdn.com/ionicframework/user_avatar/forum.ionicframework.com/codelives/32/108311_2.png) [@Codelives](https://forum.ionicframework.com/u/Codelives)\
**Post date:** [May 6, 2017, 4:49am UTC](https://forum.ionicframework.com/t/how-to-determine-if-browser-or-app/89149/4 "2017-05-06T04:49:02Z")

</div>

What you are saying is if you use it in a browser on an android device, it detects that you are an APP?

---

<div class="post-metadata">

**Author:** ![beck24](https://sea1.discourse-cdn.com/ionicframework/user_avatar/forum.ionicframework.com/beck24/32/112174_2.png) [@beck24](https://forum.ionicframework.com/u/beck24)\
**Post date:** [May 6, 2017, 4:50am UTC](https://forum.ionicframework.com/t/how-to-determine-if-browser-or-app/89149/5 "2017-05-06T04:50:06Z")

</div>

Yes, that is correct.

---

<div class="post-metadata">

**Author:** ![beck24](https://sea1.discourse-cdn.com/ionicframework/user_avatar/forum.ionicframework.com/beck24/32/112174_2.png) [@beck24](https://forum.ionicframework.com/u/beck24)\
**Post date:** [May 6, 2017, 3:15pm UTC](https://forum.ionicframework.com/t/how-to-determine-if-browser-or-app/89149/6 "2017-05-06T15:15:51Z")

</div>

I’ve checked and rechecked this, is it a bug?

---

<div class="post-metadata">

**Author:** ![Sujan12](https://sea1.discourse-cdn.com/ionicframework/user_avatar/forum.ionicframework.com/sujan12/32/108395_2.png) [@Sujan12](https://forum.ionicframework.com/u/Sujan12)\
**Post date:** [May 6, 2017, 3:44pm UTC](https://forum.ionicframework.com/t/how-to-determine-if-browser-or-app/89149/7 "2017-05-06T15:44:40Z")

</div>

Could you create a minimal repro project of this, upload it to Github and also upload the .apk and host it somewhere so other people can check? I don’t think it should be that way…

---

<div class="post-metadata">

**Author:** ![beck24](https://sea1.discourse-cdn.com/ionicframework/user_avatar/forum.ionicframework.com/beck24/32/112174_2.png) [@beck24](https://forum.ionicframework.com/u/beck24)\
**Post date:** [May 6, 2017, 8:37pm UTC](https://forum.ionicframework.com/t/how-to-determine-if-browser-or-app/89149/8 "2017-05-06T20:37:58Z")

</div>

@Sujan12 Here you go: [https://github.com/beck24/ionic-platform-test](https://github.com/beck24/ionic-platform-test)

The web app is up at: [https://beck24.github.io/](https://beck24.github.io/)

On my way out, can build an apk later, but you don’t really need that to see platform list when viewing it on a mobile browser.

Native Android browser, Chrome on Android

 ![image](https://global.discourse-cdn.com/ionicframework/original/3X/2/c/2c07b91300f5aa432e88c7ecabda2c85ffa79e9c.png)

And on Desktop - works as expected

 ![image](https://global.discourse-cdn.com/ionicframework/original/3X/2/e/2e468c1d7a9d3477a81e0e51ae23b4e2c132eac5.png)

---

<div class="post-metadata">

**Author:** ![Sujan12](https://sea1.discourse-cdn.com/ionicframework/user_avatar/forum.ionicframework.com/sujan12/32/108395_2.png) [@Sujan12](https://forum.ionicframework.com/u/Sujan12)\
**Post date:** [May 6, 2017, 8:48pm UTC](https://forum.ionicframework.com/t/how-to-determine-if-browser-or-app/89149/9 "2017-05-06T20:48:25Z")

</div>

Interesting, same for iOS, Safari:

> cordova, mobile, ios, iphone

---

<div class="post-metadata">

**Author:** ![Sujan12](https://sea1.discourse-cdn.com/ionicframework/user_avatar/forum.ionicframework.com/sujan12/32/108395_2.png) [@Sujan12](https://forum.ionicframework.com/u/Sujan12)\
**Post date:** [May 6, 2017, 8:51pm UTC](https://forum.ionicframework.com/t/how-to-determine-if-browser-or-app/89149/10 "2017-05-06T20:51:45Z")

</div>

I think the problem is here:

> <https://github.com/ionic-team/ionic/blob/5d562166fcc648dd42b6e7415b2f267e8f7ac141/src/platform/platform.ts>

Can only be “mobileweb” if there is no “cordova”- which means it isn’T build for platform browser, but copying the content of `/www`. Does this makes sense?

---

<div class="post-metadata">

**Author:** ![beck24](https://sea1.discourse-cdn.com/ionicframework/user_avatar/forum.ionicframework.com/beck24/32/112174_2.png) [@beck24](https://forum.ionicframework.com/u/beck24)\
**Post date:** [May 7, 2017, 12:04am UTC](https://forum.ionicframework.com/t/how-to-determine-if-browser-or-app/89149/11 "2017-05-07T00:04:45Z")

</div>

Ok cool, so that explains the what. I don’t know the platform well enough to know if that’s intended behavior. Given this though, is there a way to differentiate between the app version and a mobile browser?

---

<div class="post-metadata">

**Author:** ![beck24](https://sea1.discourse-cdn.com/ionicframework/user_avatar/forum.ionicframework.com/beck24/32/112174_2.png) [@beck24](https://forum.ionicframework.com/u/beck24)\
**Post date:** [May 7, 2017, 8:00pm UTC](https://forum.ionicframework.com/t/how-to-determine-if-browser-or-app/89149/12 "2017-05-07T20:00:11Z")

</div>

In case anyone else needs to do this the solution I’ve settled on is a pretty simple.

It seems that the apps (both android and ios at least) serve from the file:// protocol so

```auto
this.isApp = !document.URL.startsWith('http');

```

---

<div class="post-metadata">

**Author:** ![Sujan12](https://sea1.discourse-cdn.com/ionicframework/user_avatar/forum.ionicframework.com/sujan12/32/108395_2.png) [@Sujan12](https://forum.ionicframework.com/u/Sujan12)\
**Post date:** [May 8, 2017, 1:46pm UTC](https://forum.ionicframework.com/t/how-to-determine-if-browser-or-app/89149/13 "2017-05-08T13:46:10Z")

</div>

That is a nice workaround.

Created a ticket for this here:

> <https://github.com/ionic-team/ionic/issues/11557>

---

<div class="post-metadata">

**Author:** ![nbcesar](https://avatars.discourse-cdn.com/v4/letter/n/439d5e/32.png) [@nbcesar](https://forum.ionicframework.com/u/nbcesar)\
**Post date:** [August 11, 2017, 1:40am UTC](https://forum.ionicframework.com/t/how-to-determine-if-browser-or-app/89149/14 "2017-08-11T01:40:14Z")

</div>

A related issue - chrome on iOS is returning only ‘core’ as the platform. See screenshot below. Any ideas why or a workaround.

I am trying to determine if the site is running on a desktop vs a mobile device. It works fine on safari and chrome on android. For some reason chrome on iOS returns core.

[IMG\_6311|281x500](https://forum.ionicframework.com/uploads/short-url/lVLHoPZYbdWHWpEjVPD1qe1k9km.jpg)

---

<div class="post-metadata">

**Author:** ![Sujan12](https://sea1.discourse-cdn.com/ionicframework/user_avatar/forum.ionicframework.com/sujan12/32/108395_2.png) [@Sujan12](https://forum.ionicframework.com/u/Sujan12)\
**Post date:** [August 11, 2017, 12:49pm UTC](https://forum.ionicframework.com/t/how-to-determine-if-browser-or-app/89149/15 "2017-08-11T12:49:31Z")

</div>

Please create an issue about this here: [https://github.com/ionic-team/ionic/issues](https://github.com/ionic-team/ionic/issues) Include the screenshot and a bit of description what code you are executing. Thanks.

As a solution, you might want to look at the underlying code and see if you can copy some into your .ts file and make it react to Chrome iOS correctly.

---

<div class="post-metadata">

**Author:** ![beck24](https://sea1.discourse-cdn.com/ionicframework/user_avatar/forum.ionicframework.com/beck24/32/112174_2.png) [@beck24](https://forum.ionicframework.com/u/beck24)\
**Post date:** [October 24, 2017, 2:52am UTC](https://forum.ionicframework.com/t/how-to-determine-if-browser-or-app/89149/16 "2017-10-24T02:52:06Z")

</div>

Hmm, with the WKWebView my above workaround doesn’t work anymore as ios uses [http://localhost:8080](http://localhost:8080) to serve from.

So the less nice thing can still be done like this

```auto
this.isApp = (!document.URL.startsWith('http') || document.URL.startsWith('http://localhost:8080'));

```

It works so long as your local ionic serve doesn’t use the same port 🙂

---

<div class="post-metadata">

**Author:** ![karansharma](https://avatars.discourse-cdn.com/v4/letter/k/bcef8e/32.png) [@karansharma](https://forum.ionicframework.com/u/karansharma)\
**Post date:** [October 27, 2017, 8:03am UTC](https://forum.ionicframework.com/t/how-to-determine-if-browser-or-app/89149/17 "2017-10-27T08:03:20Z")

</div>

Thnx for it, it was really needed…

---

<div class="post-metadata">

**Author:** ![ganim](https://avatars.discourse-cdn.com/v4/letter/g/f475e1/32.png) [@ganim](https://forum.ionicframework.com/u/ganim)\
**Post date:** [November 7, 2017, 9:18am UTC](https://forum.ionicframework.com/t/how-to-determine-if-browser-or-app/89149/18 "2017-11-07T09:18:48Z")

</div>

> [@beck24](#):
>
> this.isApp = (!document.URL.startsWith(‘http’) || document.URL.startsWith(‘[http://localhost:8080](http://localhost:8080)’));

great !!! worked like charm !!! thank you 🙂

---

<div class="post-metadata">

**Author:** ![CKGrafico](https://sea1.discourse-cdn.com/ionicframework/user_avatar/forum.ionicframework.com/ckgrafico/32/67654_2.png) [@CKGrafico](https://forum.ionicframework.com/u/CKGrafico)\
**Post date:** [June 13, 2018, 11:49am UTC](https://forum.ionicframework.com/t/how-to-determine-if-browser-or-app/89149/19 "2018-06-13T11:49:31Z")

</div>

Thats nice, I’ve added this to difference between browser and electron

public isBrowser() {  
return (this.\_platform.is(‘core’) || this.\_platform.is(‘mobileweb’)) && this.hasHttp();  
}

```
public isDesktop() {
    return this._platform.is('core') && !this.hasHttp();
}
```

---

<div class="post-metadata">

**Author:** ![Overton](https://sea1.discourse-cdn.com/ionicframework/user_avatar/forum.ionicframework.com/overton/32/100440_2.png) [@Overton](https://forum.ionicframework.com/u/Overton)\
**Post date:** [July 3, 2018, 10:25pm UTC](https://forum.ionicframework.com/t/how-to-determine-if-browser-or-app/89149/20 "2018-07-03T22:25:38Z")

</div>

[String.startsWith is unsupported in IE](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/startsWith). I recommend using indexOf instead:

`const isApp = document.URL.indexOf('http') !== 0;`

[Next page](https://forum.ionicframework.com/t/how-to-determine-if-browser-or-app/89149.md?page=2)
