Ionic 5 / Capacitor:如何判断应用程序是在浏览器中运行还是编译为本机应用程序?

8
我只想知道,我的Ionic 5应用程序是在浏览器中运行还是在编译的应用程序的Web视图中运行。 平台无法工作: 它只告诉有关设备的信息。但是当我在Android设备上的chrome中运行它时,它返回与编译后运行时相同的平台。
分析URL以检查Webview URL是否有效,但使用电容器实时重新加载时不起作用。因为那时它与本地浏览器中的URL相同。顺便说一下,分析URL感觉像是一个丑陋的解决方案。
难道真的很难获得这个简单而重要的信息,还是我错过了什么?

编辑:
平台输出
在Ubuntu上使用ionic serve的Chrome: ["desktop"]
在Android上的Chrome: ["android", "mobile", "mobileweb"]
使用电容器实时重新加载的Android: ["android", "phablet", "mobile", "mobileweb"]
编译的Android: ["android", "phablet", "cordova", "capacitor", "mobile", "hybrid"]


你好!能否请您添加一下在这两种情况下调用 platforms() 方法(https://ionicframework.com/docs/angular/platform#platforms-string-)的结果呢?该方法返回一个平台列表,因此查看是否有任何差异(或Ionic中是否存在错误)将非常有用。 - sebaferreras
1
已将其添加到原始帖子中。我认为livereload应该输出“电容器”,对吧?然后我有一个属性来区分。 - user1383029
不是很确定,我认为只有在移动设备上本地运行时才会返回电容器(livereload有点棘手,因为它只在开发过程中使用)。但是你仍然可以像这样使用 const isBrowser = platform.is('mobileweb') || platform.is('desktop'),这应该可以工作,对吧?这样你就知道应用程序是在本地运行还是在浏览器中运行。 - sebaferreras
1
但是使用livereload的电容器也给了我“mobileweb”。我认为电容器livereload的原因是可以通过实时重新加载来测试本机应用程序。如果不是这种情况,那么我为什么要使用它呢?对于浏览器测试,我有ionic serve。 - user1383029
这是一个好问题。在**Capacitor文档*中提到,ionic capacitor run将执行以下操作:执行ionic build(或使用--livereload选项从ionic serve运行dev服务器)*。因此,实时重新加载标志只会在设备上运行dev服务器。说实话,我并不经常使用它,但我想当处理iOS和顶部/底部安全区域插图时,它可能很有用。您能否尝试在使用livereload时调用本机插件,看看会发生什么? - sebaferreras
当我调用电容器浏览器插件(https://capacitorjs.com/docs/apis/browser)时,它会在系统的网络浏览器中打开,而不是应用内浏览器。 但是我真的有一个问题:为什么我需要电容器实时重新加载?与ionic serve有什么区别? - user1383029
1个回答

18

1
它不在livereload模式下运行。这就是讨论(见上文)的内容。我在我的基本问题中提到了它。 - user1383029
1
这与Ionic平台不同,您在问题中没有提到Capacitor.platform。 - jcesarmobile
啊,谢谢。我没有正确阅读它。这个可以用!也许你可以在你的答案中添加文档链接:https://capacitorjs.com/docs/basics/utilities#getplatform - user1383029
这个完美地运作,谢谢。我也在分析URL,但结果不一致。Capacitor.getPlatform() 完美地运作,谢谢! - VincentH

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接