我正在使用jQuery Mobile和Phonegap Build制作应用程序。 jQuery Mobile javascript代码工作正常,但是phonegap javascript代码似乎不起作用。它使用多个html模板的应用程序,我登录了应用程序的索引文件。
我正在使用phonegap 3.1.0版(构建服务的当前默认值)
我在config.xml文件中添加以下行:
<gap:plugin name="org.apache.cordova.device" />
<gap:plugin name="org.apache.cordova.file" />
然后,在index.html,我在标题处添加以下脚本:
<script src="phonegap.js"></script>
<script src="js/settings_page.js"></script>
<script src="js/jquery-2.0.3.min.js"></script>
<script src="js/jquery-mobile-events.js"></script>
<script src="js/jquery.mobile-1.4.1.min.js"></script>
settings_page文件包含一些基本的phonegap API交互,如果未设置,会在本地存储中写入一些默认值:
console.log('added');
document.addEventListener('deviceready', deviceReady, false);
function deviceReady() {
console.log('called');
var application_settings = window.localStorage;
//if no settings have been created, create them
if (application_settings('defaults') === null) {
application_settings.setItem('defaults', 'true');
application_settings.setItem('type', 'all');
application_settings.setItem('sport', 'all');
application_settings.setItem('customer', 'all');
application_settings.setItem('order', 'date');
application_settings.setItem('refresh', 'never');
console.log('defaults set');
}
}
使用ripple模拟器我可以在控制台日志中看到“添加”注释,但是从未到达“被调用”注释,如果我运行应用程序并使用weinre进行调试,则没有任何控制台日志注册。
在这两种情况下都没有生成任何密钥,但我也没有收到任何错误,我错过了什么?我按照此处PhoneGap 3.1 Build Device Is Not Defined和此处http://www.raymondcamden.com/index.cfm/2013/10/1/PhoneGap-Build-and-PhoneGap-30的建议将功能更改为插件,但仍然无效,任何帮助都非常感谢
答案 0 :(得分:1)
您需要在实际设备或模拟器上运行。在ripple chrome扩展上运行不会帮助你。
答案 1 :(得分:1)
添加以下行帮助我...我已经完成了所有尝试,但没有任何帮助,所以最后我经历了http://docs.build.phonegap.com/en_US/#googtrans(en)配置块..
<plugin name="cordova-plugin-whitelist" version="1"/>
<allow-intent href="http://*/*"/>
<allow-intent href="https://*/*"/>
<allow-intent href="tel:*"/>
<allow-intent href="sms:*"/>
<allow-intent href="mailto:*"/>
<allow-intent href="geo:*"/>
<platform name="android">
<allow-intent href="market:*"/>
</platform>
<platform name="ios">
<allow-intent href="itms:*"/>
<allow-intent href="itms-apps:*"/>
</platform>
答案 2 :(得分:0)
好好经过几个小时的调试和测试后我解决了这个问题,我认为这可以帮助将来引用任何其他的phonegap构建用户,所以我将逐步列出我在这里所做的事情。我不知道这是不是最好的方法,所以我真的很感激可以改进的一些反馈:)
要使jQuery与Phonegap Build和Phonegap API一起使用,您需要在应用程序的索引中执行以下操作:
<script src="phonegap.js"></script>
的引用,理想情况下,这可能是您的第一个脚本引用,它不需要任何库工作,您不需要拥有库本身,phonegap build将添加它一旦它编译代码。<script>var phonegap_ready = false</script>
使用您的事件监听器添加脚本
document.addEventListener("deviceready", onDeviceReady, false);
function onDeviceReady() {
phonegap_ready = true;
}
作为旁注,在使用jQuery Mobile时检查设备是否准备好它只是一个标准,经过一些测试我运行后,phonegap设备准备好比jQuery pageshow事件更快地启动(考虑到所有DOM操作jqm都是有意义的)页面事件确实如此)但我仍然建议谨慎。
在您的代码中,您可以使用deffered call $.when()
异步检查,以便在phonegap框架完全正常运行之前不执行phonegap调用。作为使用先前创建的全局变量的示例:
$(document).on('pageshow', '#login_page', function (parent_event) {
//do jQuery Mobile event handlings here
$.when(phonegap_ready === true).then(function () {
phonegapApiFunctionsCall();
});
});
如果功能或插件(调用phonegap API作为Phonegap Build 3.0之前的功能,以及Phonegap Build 3.0中的功能已被替换为插件),您将能够从phonegapApiFunctionsCall()运行API命令,将避免phonegap deviceready事件和jQuery Mobile页面初始化事件之间的初始化问题。