PhoneGap:检测是否在桌面浏览器上运行
我正在开发一个Web应用程序,该应用程序使用PhoneGap:Build作为移动版本,并且希望为“桌面”和移动版本提供单个代码库。 我希望能够检测到PhoneGap调用是否可以工作(例如,移动设备上的用户是否支持PhoneGap)。
我搜索了,不敢相信没有简单的方法来做到这一点。 许多人提出了建议;
除非您从应用程序的桌面版本中删除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版):
CordovaLibApp/AppDelegate.m
src/org/apache/cordova/example/cordovaExample.java
example/package.appxmanifest
www/config.xml
framework/appinfo.json
src/WebForm.cpp
(第56行) 最后,你可以在你的网站的任何地方使用它,如果它在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