5

检测应用程序是在 phonegap 中运行,还是仅在使用 JavaScript 的移动/桌面浏览器中运行的最有效和最可靠的方法是什么?我正在尝试消除阻止我在任何浏览器(桌面或移动)中测试/调试我的 phonegap 应用程序的任何问题,并为我的应用程序创建一个真正通用的代码库。

我打算用 phonegap 特定的调用来构建我的函数,如下所示:

if (phonegapisrunning) {
    // phonegap specific javascript calls here
}
else {
    // standard javascript calls here
}

在寻找解决方案时,我遇到了这个线程: PhoneGap: Detect if running on desktop browser

虽然这个线程讨论了这个问题,但我没有看到关于哪种方法最有效/最可靠的明确答案。我应该绑定到 onDeviceReady() 事件吗?我应该检查 window.device 吗?是否有更有效或更可靠的方法来检查应用程序是否通过 JavsScript 在 phonegap 中运行?

这个线程提到了 Ripple Chrome 插件: Phonegap web app in regular desktop browsers

Ripple 工具看起来可能是一个有价值的测试工具。但我试图让我的 phonegap 应用程序在没有插件的桌面浏览器中运行。

如果确定该应用程序未在 phonegap 中运行,我将使用用户代理嗅探来确定浏览器是桌面还是移动,并在需要时进一步分离任何代码。

4

4 回答 4

3

我已经看到了很多关于检查用户代理的答案。尽管这些对于比较加载页面的平台很有用,但它们仍然无法区分是在Cordova 应用程序的浏览器中运行还是在常规 Web 浏览器中运行。在对 android cordova javascript 文件进行了大量挖掘之后,我发现在 cordova 应用程序中运行时设置了以下变量:

window._cordovaNative

浏览 ios cordova javascript,我发现:

window._nativeReady

在您加载任何cordova javascript或检查任何用户代理等之前,在您的页面中抛出这些警报,并比较从Web浏览器加载和从获取动态内容的cordova应用程序加载之间的结果:

alert("Android: " + window._cordovaNative);
alert("iOS: " + window._nativeReady);

我猜其他设备的 phonegap 文件有不同的全局变量,但是现在,这对我来说会很好用——我希望它对你有用!

于 2013-10-25T05:26:22.463 回答
2

我的建议是在 onDeviceReady Phonegap 调用之外创建/调用您的 javascript 函数。

或者也许检查正在运行的 Cordova / Phonegap 的版本,例如:

var string = device.cordova; // or device.phonegap

if (string == null) {
  //do non phonegappy stuff here
} else {
  //do phonegappy stuff
}
于 2012-07-01T23:47:37.937 回答
1

虽然它可能不是最干净的解决方案,但一种简单可靠的方法是在 deviceready 上创建/设置一个全局变量:

var isCordovaReady = true;

然后:

if (isCordovaReady) {
    // do cordova/phonegap stuff
}
else {
    // do non cordova/phonegap stuff here
}
于 2014-11-24T22:19:29.600 回答
0

我发布了最佳答案:PhoneGap:检测是否在桌面浏览器上运行

虽然这没有大量记录并且有些争议,但我已经能够在我的所有项目中使用这段代码:

if (navigator.userAgent.match(/(iPhone|iPod|iPad|Android|BlackBerry|IEMobile)/)) {
    document.addEventListener("deviceready", onDeviceReady, false); //phone
} else {
    onDeviceReady(); //this is the browser
}

您可以对其进行一些修改以适用于您的项目,如下所示:

var phonegapisrunning = false;
if (navigator.userAgent.match(/(iPhone|iPod|iPad|Android|BlackBerry|IEMobile)/)) {
    document.addEventListener("deviceready", onDeviceReady, false); //phone
    //change to true
    phonegapisrunning = true;

} else {
    onDeviceReady(); //this is the browser
}

希望这可以帮助 !

于 2013-07-09T23:52:27.607 回答