我正在开发PhoneGapping,这是我从头开始编写的一款移动网络应用程序,我想知道每个人对渐进增强的想法是什么?
现在,PhoneGap应用程序只是指向我们的域,所以服务器上的任何代码都是正在运行的。我想尽可能保持这种方式,但我想知道是否有某种方法可以检测观众是否通过PhoneGap,然后在此基础上启用其他功能(例如本地联系人、推送通知)。
我知道PhoneGap需要PhoneGap.js文件存在,而且似乎全面包含它会给非PhoneGap用户带来一些麻烦,所以这里的任何想法都是非常好的。谢谢
我会发布一个链接到一篇关于这方面的博客文章,并提供更多细节/示例,但本质上可以归结为三件事:
- 修改来自PhoneGap的请求,然后在服务器上检测
- 确保正确的Javascript API位于正确的位置
- 检测何时显示/启用PhoneGap特定功能
我目前完成这项工作的方式如下:
1) 修改来自PhoneGap的请求
您可以从PhoneGap应用程序向用户代理添加自定义字符串,然后在服务器上搜索该自定义字符串。最简单的方法(在Android上)是在platforms/android/src/path/to/your/app/[app_name].java
中。在onCreate
方法中,在super.loadUrl(Config.getStartUrl());
行之后添加:
String ua = this.appView.getSettings().getUserAgentString();
this.appView.getSettings().setUserAgentString(ua + " your_custom_string");
2) 确保正确的Javascript API位于正确的位置
当您构建一个PhoneGap应用程序并使用本地源运行它时,PhoneGap使用的实际Javascript API会有一个后备方案。如果在本地运行,则项目目录中根本不需要cordova.js
或phonegap.js
文件。你可以在platforms/android/assets/www
中找到你需要的文件。您正在查找cordova.js
、cordova_plugins.js
和整个plugins/
目录。那么,在你的网络应用程序中,你需要确保你为cordova.js
指向的文件夹也有plugins/
目录。例如:
<script type="text/javascript" src="/js/cordova.js"></script>
意味着所有内容都应该在webroot/js/
文件夹中。
3) 检测何时显示/启用PhoneGap特定功能
这与从早期版本中读取your_custom_string
的用户代理以及启用/禁用功能一样简单。除非查看器来自PhoneGap,否则您不会想加载cordova.js
脚本(否则情况会变得奇怪),并确保在deviceready
事件上设置了一个事件侦听器,并在该侦听器启动后执行任何PhoneGap特定的代码。
即将发布的博客文章将有一个使用Ionic和PhoneGap的联系人API的简单示例。
就这样!我真的很兴奋这为渐进增强打开了潜力。这使我能够同时支持移动网络和原生(Android,可能还有iOS),99%的代码库相同,并且只有在我知道用户拥有这些功能的情况下,我才能启用这些功能。这就像类固醇上的黑客特征检测。