我无法在文档中找到最好的方法,在Ionic 2应用程序中,如果它在浏览器中运行(使用 ionic serve )命令)或在设备/模拟器中。
实际上我正在做的是检查窗口对象是否有一个'插件'属性,但我不知道是否有最好的方式。
printf()
答案 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'));