【问题标题】:Most efficient and reliable method to detect if app is running in phonegap via JavaScript通过 JavaScript 检测应用程序是否在 phonegap 中运行的最有效和最可靠的方法
【发布时间】:2012-07-02 09:55:11
【问题描述】:

检测应用程序是在 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 中运行,我将使用用户代理嗅探来确定浏览器是桌面还是移动,并在需要时进一步分离任何代码。

【问题讨论】:

  • 你找到解决办法了吗??

标签: javascript cordova


【解决方案1】:

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

window._cordovaNative

查看ios cordova javascript,我发现:

window._nativeReady

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

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

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

【讨论】:

    【解决方案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
    }
    

    【讨论】:

      【解决方案3】:

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

      var isCordovaReady = true;
      

      然后:

      if (isCordovaReady) {
          // do cordova/phonegap stuff
      }
      else {
          // do non cordova/phonegap stuff here
      }
      

      【讨论】:

        【解决方案4】:

        我发布了最佳答案:PhoneGap: Detect if running on desktop browser

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

        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
        }
        

        希望这会有所帮助!

        【讨论】:

          猜你喜欢
          • 2012-12-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-12-12
          • 1970-01-01
          • 1970-01-01
          • 2023-03-07
          • 2011-05-27
          相关资源
          最近更新 更多