我想确保只在我使用设备(iOs,Android ...)时启动inappbrowser,但如果我在浏览器(本地开发模式或只是带有gulp构建的Web应用程序),我想要使用target =“_ blank”链接到该页面。
我正在尝试将Ionic 2代码重用为Web App。所以当我构建应用程序时,它也可以在浏览器桌面上运行。所以platform.ready()对我来说还不够。因为我需要知道用户是否在桌面浏览器上,我可以做一些不同的事情。
答案 0 :(得分:53)
在这里,您可以使用以下功能代替点击功能。
onClickOfButton(){
// Check If Cordova/Mobile
if (this.platform.is('cordova')) {
window.location.href = url;
}else{
window.open(url,'_blank');
}
}
这可能会有所帮助:)
答案 1 :(得分:20)
您可以使用platform.is('core')
,在浏览器时使用true。平台清单:
有关详细信息,请参阅http://ionicframework.com/docs/v2/api/platform/Platform/。
答案 2 :(得分:5)
基于hhung,因为核心仅检测您是否使用Windows浏览器打开应用程序,但如果您使用的是Chrome移动仿真,核心将返回false,但 mobileweb 将返回true。因此,您应该使用以下内容:
if(this.platform.is('core') || this.platform.is('mobileweb')) {
this.isApp = false;
} else {
this.isApp = true;
}
答案 3 :(得分:5)
通过此功能,您可以检测到您是否在浏览器中:
if(window.hasOwnProperty('cordova')){ /* use webview */ }
else { /* use browser link */ }
答案 4 :(得分:4)
我在Ionic 3应用程序中遇到了同样的问题,并发现here是一种检查应用程序是否在浏览器中运行而不是真实设备/模拟器的好方法:
isApp = !document.URL.startsWith('http');
基本上,它依赖于真实设备或模拟器使用ftp
协议而不是浏览器使用的http
来提供资源这一事实。
答案 5 :(得分:1)
对我而言,最可靠的解决方案是Platform的.is()方法及其承诺结果的结合。我在提供程序内部使用了支票,因此可以在全球使用它。也许这种方法对那些筋疲力尽的人有用。
import { Platform } from 'ionic-angular';
constructor(public platform: Platform) {
public env:string = 'dev';
this.platform.ready().then((readySource) => {
if (readySource) {
if (platform.is('core') || readySource.toLowerCase() !== 'cordova') {
this.env = 'dev';
}
else {
this.env = 'production';
}
}
答案 6 :(得分:0)
我们有一种简单的方法可以知道我们是在浏览器中运行项目的'/ www'文件夹,还是在设备中运行(模拟/构建)。
在Cordova / Phonegap的本地项目中,index.html具有以下标签:
<script type="text/javascript" src="cordova.js"></script>
但是这个文件不存在,因为当我们模拟或构建时,Cordova / Phonegap会注入phonegap.js或cordova.js。如果我们在浏览器中运行www文件夹,总是会看到如下错误:
GET file:///D:/Cordova/Workspace/TestProject/www/cordova.js net::ERR_FILE_NOT_FOUND
然后我们可以检查index.html标签是否加载此文件。如果加载,我们在App中,如果没有,我们在浏览器(本地):
<script type="text/javascript" src="cordova.js" onload="alert('app!');"></script>
我们认为是知道我们在哪里的最快方式。