Ionic 2:检查是否在浏览器环境中运行的最佳方法

时间:2016-11-08 10:16:13

标签: javascript cordova ionic-framework ionic2

我无法在文档中找到最好的方法,在Ionic 2应用程序中,如果它在浏览器中运行(使用 ionic serve )命令)或在设备/模拟器中。

实际上我正在做的是检查窗口对象是否有一个'插件'属性,但我不知道是否有最好的方式。

printf()

5 个答案:

答案 0 :(得分:1)

哦,我在文档中找到了Platform对象,它有一些方法。 http://ionicframework.com/docs/v2/api/platform/Platform/ 一个是is(key),可以匹配

import { Platform } from 'ionic-angular';

@Component({...})
export MyPage {
  constructor(platform: Platform) {
    this.platform = platform;
    ...
    if(this.platform.is('core')) {
     //it's in the browser
    }
  }
}

答案 1 :(得分:0)

为了向上面给出的解决方案添加更多内容,以下似乎确实可行:

import { Platform } from 'ionic-angular';

@IonicPage()
@Component({})
export class WhichPlatformPage {
  isApp: boolean;

  constructor(private platform: Platform) {
    this.isApp = this.platform.is('core') || this.platform.is('mobileweb') ? false : true;
  }
}

ionViewDidLoad() {
  console.log(this.isApp ? 'Running from mobile' : 'Running from the browser');
}

这似乎对我很好 - 与之前的答案的主要区别在于我们还在检查“移动网络”。平台。

有趣的是,如果您使用ionic cordova build browser命令,那么' mobileweb'成为移动' - 打破这个解决方案 - 因为这是试图尽可能地模仿在设备上。这是GitHub上的问题:

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

使用以下内容设置isApp的解决方案:

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

这是有效的,因为移动应用程序使用'文件'协议。但是,如果你读到这个问题,Ionic实际上建议不要使用当前的cordova浏览器平台,所以你最好使用原始解决方案。

答案 2 :(得分:0)

虽然问题有点老但仍然有效-还有一个选择是使用 https://ionicframework.com/docs/native/device/-Device对象提供了platform属性,该属性等于浏览器上的'browser'。该插件仅在通过cordova运行webapp时可用。

答案 3 :(得分:0)

如果有任何人遇到此问题,我会以可用的答案进行更新。

此功能适用于最新的iOS和Android版本:

public isApp(): boolean {
    return (
      document.URL.indexOf('http://localhost') === 0 || // Android
      document.URL.indexOf('ionic') === 0 || // iOS 11+ Ionic Web View
      document.URL.indexOf('https://localhost') === 0 // iOS 10 Ionic Web View
    );
  }

有关更多信息和警告,请参见Ionic Webview自述文件。

答案 4 :(得分:0)

我发现这个解决方案在 Ionic 论坛中得到解决

this.isApp = (!document.URL.startsWith('http') || document.URL.startsWith('http://localhost:8080'));
尽管随着 ios/androd 新版本的变化到来,它可能会在未来的版本中发生变化 详细讨论https://forum.ionicframework.com/t/how-to-determine-if-browser-or-app/89149/15