2013-02-26 34 views
4

我想重新使用我的手机HTML,CSS和JS代码作为一个Web应用程序。 我将通过并删除任何移动功能。Phonegap代码作为一个Web应用程序

的目的是为了有一个Web应用程序,它提供了一些的移动应用功能,我使用目前很少移动设备的功能。但我猜测,每次发布我的移动应用程序代码都会很麻烦。

你们中的任何一个人都尝试过吗?有小费吗 ?

回答

7

使用响应式设计,您的手机代码应该可以在几乎任何设备上运行。知道它运行的是什么(设备和操作系统)非常重要,以便您可以做出相应的响应。我建立一个window.deviceInfo对象前面有以下信息:

  • window.deviceInfo.typehandheldtabletdesktop
  • window.deviceInfo.brandiosandroidmicrosoftwebosblackberry
  • window.deviceInfo.modebrowserstandalonewebview
  • window.deviceInfo.mobiletruefalse
  • window.deviceInfo.phonegaptruefalse

我使用一个名为viewport一个容器<div>创建我的反应容器中,并根据尺寸设备上它是上。

演示:jsFiddle

这是初始化代码设置好一切:

initializeEnvironment(); 
initializeDimensions(); 
initializePhoneGap(function() { 
    //start app 
}); 

首先,我建立了window.deviceInfo

function initializeEnvironment() { 
    //window.deviceInfo.type: handheld, tablet, desktop 
    //window.deviceInfo.brand: ios, android, microsoft, webos, blackberry 
    //window.deviceInfo.mode: browser, standalone, webview 
    //window.deviceInfo.mobile: true, false 
    //window.deviceInfo.phonegap: true, false 

    var userAgent = window.navigator.userAgent.toLowerCase(); 
    window.deviceInfo = {}; 

    if (/ipad/.test(userAgent) || (/android/.test(userAgent) && !/mobile/.test(userAgent))) { 
     window.deviceInfo.type = 'tablet'; 
    } else if (/iphone|ipod|webos|blackberry|android/.test(userAgent)) { 
     window.deviceInfo.type = 'handheld'; 
    } else { 
     window.deviceInfo.type = 'desktop'; 
    }; 

    if (/iphone|ipod|ipad/.test(userAgent)) { 
     var safari = /safari/.test(userAgent); 
     window.deviceInfo.brand = 'ios'; 
     if (window.navigator.standalone) { 
      window.deviceInfo.mode = 'standalone'; 
     } else if (safari) { 
      window.deviceInfo.mode = 'browser'; 
     } else if (!safari) { 
      window.deviceInfo.mode = 'webview'; 
     }; 
    } else if (/android/.test(userAgent)) { 
     window.deviceInfo.brand = 'android'; 
     window.deviceInfo.mode = 'browser'; 
    } else if (/webos/.test(userAgent)) { 
     window.deviceInfo.brand = 'webos'; 
     window.deviceInfo.mode = 'browser'; 
    } else if (/blackberry/.test(userAgent)) { 
     window.deviceInfo.brand = 'blackberry'; 
     window.deviceInfo.mode = 'browser'; 
    } else { 
     window.deviceInfo.brand = 'unknown'; 
     window.deviceInfo.mode = 'browser'; 
    }; 
    window.deviceInfo.mobile = (window.deviceInfo.type == 'handheld' || window.deviceInfo.type == 'tablet'); 
}; 

然后我调整viewport和其他需要它的东西。移动设备使用window.innerWidthwindow.innerHeight占据全屏。

function initializeDimensions() { 
    var viewport = document.getElementById('viewport'); 
    if (window.deviceInfo.mobile) { 
     viewport.style.width = window.innerWidth + 'px'; 
     viewport.style.height = window.innerHeight + 'px'; 
    } else { 
     //requirements for your desktop layout may be different than full screen 
     viewport.style.width = '300px'; 
     viewport.style.height = '300px'; 
    }; 
    //set individual ui element sizes here 
}; 

最后,我用window.device(注意,这是不一样的deviceInfo对象创建),以验证是否PhoneGap的是可用的和准备。当我的代码运行在应该正在运行phonegap的设备上运行时,我轮询该对象而不是依赖于挑剔的事件。当调用initializePhoneGap()回调时,该应用程序已准备好启动。

在整个应用程序中,我将if(window.deviceInfo.phonegap) {}中的phonegap功能包裹起来。

function initializePhoneGap(complete) { 
    if (window.deviceInfo.brand == 'ios' && window.deviceInfo.mode != 'webview') { 
     window.deviceInfo.phonegap = false; 
     complete(); 
    } else if (window.deviceInfo.mobile) { 
     var timer = window.setInterval(function() { 
      if (window.device) { 
       window.deviceInfo.phonegap = true; 
       complete(); 
      }; 
     }, 100); 
     window.setTimeout(function() { //failsafe 
      if (!window.device) { //in webview, not in phonegap or phonegap failed 
       window.clearInterval(timer); 
       window.deviceInfo.phonegap = false; 
       complete(); 
      }; 
     }, 5000); //fail after 5 seconds 
    } else { 
     window.deviceInfo.phonegap = false; 
     complete(); 
    }; 
}; 
+0

这可能会帮助我未来!谢谢 !! :) – 2013-02-26 05:00:35

+0

多么美妙的答案!这看起来正是我所需要的:D – 2014-04-21 10:01:37

0

是的,它会干活都试过你requirement.Including科尔多瓦js文件的作品反之亦然但是有一些功能不supported.But你一定会得到基本的。

1

我们正在开发iPad应用程序并将其作为移动网站进行部署。无论何时进行PhoneGap特定调用,使用称为isRunningOnPhoneGap()的常用方法(如果代码以网站的形式运行,则返回false),我们决定是调用PhoneGap功能还是显示Web功能。这是我们如何决定应用程序是作为网站还是移动设备运行。

var isRunningOnPhoneGap: function() { 

     if ((document.URL.indexOf('http://') === -1) && (document.URL.indexOf('https://') === -1)) { 
      if (navigator.userAgent.match(/(iPhone|iPod|iPad|Android|BlackBerry)/)) { 
       return true; 
      } else { 

       return false; 
      } 
     } else { 
      return false; 
     } 
    } 
+0

您是否能够通过Apple获得此应用程序的批准? – zachzurn 2013-05-01 19:07:06

+0

这个应用程序是一个企业应用程序,它不会通过应用程序商店。我没有看到任何理由为什么苹果会拒绝这个代码的应用程序。 – Whizkid747 2013-05-01 19:43:42

+0

好的,谢谢。只是好奇。 – zachzurn 2013-05-01 19:45:48

相关问题