PhoneGap:检测是否在桌面浏览器上运行

我正在开发一个Web应用程序,该应用程序使用PhoneGap:Build作为移动版本,并且希望为“桌面”和移动版本提供单个代码库。 我希望能够检测到PhoneGap调用是否可以工作(例如,移动设备上的用户是否支持PhoneGap)。

我搜索了,不敢相信没有简单的方法来做到这一点。 许多人提出了建议;

  • http://www.sencha.com/forum/showthread.php?144127-Checking-if-running-in-PhoneGap-or-Mobile-Web-Browser
  • http://groups.google.com/group/phonegap/browse_thread/thread/322e80bd41bb1a54/a421300eb2a2029f?lnk=gst&q=detect+desktop#a421300eb2a2029f
  • http://groups.google.com/group/phonegap/browse_thread/thread/8a95dfeb0f313792/3ff10d8f35211739?lnk=gst&q=detect+desktop+browser#3ff10d8f35211739
  • 除非您从应用程序的桌面版本中删除PhoneGap Javascript文件,否则这些工作都不起作用,这打破了我拥有一个代码库的目标。

    到目前为止,我唯一提出的解决方案是浏览器/用户代理嗅探,但至少可以说这并不健全。 欢迎任何更好的解决

    编辑:一个稍微好一点的解决方案是尝试在一些小超时后调用PhoneGap函数 - 如果它不起作用,那么假定用户在桌面Web浏览器上。


    我使用这个代码:

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

    UPDATE

    还有很多其他方法可以检测phonegap是否在浏览器上运行,这是另一个很好的选择:

    var app = document.URL.indexOf( 'http://' ) === -1 && document.URL.indexOf( 'https://' ) === -1;
    if ( app ) {
        // PhoneGap application
    } else {
        // Web page
    }  
    

    如此处所示:在移动浏览器或PhoneGap应用程序之间进行检测


    几天前我写了一篇关于它的文章。 这是最好的解决方案,你可以找到(直到PhoneGap将发布的东西,可能或不可能),它是简短的,简单和完美的(我已经以各种可能的方式和平台检查过它)。

    该功能将为98%的案例完成工作。

    /**
     * Determine whether the file loaded from PhoneGap or not
     */
    function isPhoneGap() {
        return (window.cordova || window.PhoneGap || window.phonegap) 
        && /^file:/{3}[^/]/i.test(window.location.href) 
        && /ios|iphone|ipod|ipad|android/i.test(navigator.userAgent);
    }
    
    if ( isPhoneGap() ) {
        alert("Running on PhoneGap!");
    } else {
        alert("Not running on PhoneGap!");
    }
    

    要完成其他2%的案例,请按照以下步骤操作(它涉及对本机代码的轻微更改):

    创建一个名为__phonegap_index.html的文件,其源代码为:

    <!-- __phonegap_index.html -->
    <script type="text/javascript">
        function isPhoneGap() {
            //the function's content is as described above
        }
    
        //ensure the 98% that this file is called from PhoneGap.
        //in case somebody accessed this file directly from the browser.
        if ( isPhoneGap() )
            localStorage.setItem("isPhoneGap","1");
    
        //and redirect to the main site file.
        window.location = "index.html";
    </script>
    

    现在,在本机上,只需将所有PhoneGap平台上的index.html起始页更改为__phonegap_index.html即可 。 假设我的项目名称是示例 ,您需要更改的文件(如PhoneGap 2.2.0版):

  • iOS - CordovaLibApp/AppDelegate.m
  • Android - src/org/apache/cordova/example/cordovaExample.java
  • Windows 8 - example/package.appxmanifest
  • 黑莓 - www/config.xml
  • WebOS - framework/appinfo.json
  • Bada - src/WebForm.cpp (第56行)
  • Window Phone 7 - 不知道哪里(有人还在那个平台上开发?!)
  • 最后,你可以在你的网站的任何地方使用它,如果它在PhoneGap上运行的话:

    if ( localStorage.getItem("isPhoneGap") ) {
        alert("Running on PhoneGap!");
    } else {
        alert("Not running on PhoneGap!");
    }
    

    希望能帮助到你。 :-)


    我知道它刚刚被回答,但“PhoneGap.available”不存在了。 你应该使用:

    if (window.PhoneGap) {
      //do stuff
    }
    

    或者从1.7开始,更喜欢:

    if (window.cordova) {
      //do stuff
    }
    
    链接地址: http://www.djcxy.com/p/74141.html

    上一篇: PhoneGap: Detect if running on desktop browser

    下一篇: Detecting that the browser has no mouse and is touch