如何在Cordova中集成jQuery Mobile?安卓命令失效问题排查
Cordova与jQuery Mobile兼容问题及解决方案
明确说:Cordova和jQuery Mobile完全兼容,你遇到的命令失效问题,核心出在代码加载时机和事件绑定的方式上。
问题根源拆解
- 事件触发顺序搞反了
你把deviceready放进$(document).ready()是错误的——这两个事件的触发逻辑完全不同:
$(document).ready():DOM结构加载完就触发,但此时Cordova的原生插件还没初始化,navigator.notification这类API根本不存在,调用自然无效。deviceready:Cordova所有插件初始化完成后才会触发,这是唯一能安全调用Cordova原生API的时机。
- 事件绑定方式不适配jQuery Mobile
jQuery Mobile默认用AJAX加载页面,动态生成的元素如果直接用$("#xxx").click()绑定事件,页面切换后会失效,导致点击或提交时无法触发对应逻辑。
修复代码及步骤
1. 正确绑定deviceready事件
把所有依赖Cordova API的逻辑,全部放在deviceready的回调里,示例代码:
// 监听Cordova初始化完成事件 document.addEventListener("deviceready", onDeviceReady, false); function onDeviceReady() { console.log("Cordova插件已全部初始化"); // 在这里绑定所有需要调用Cordova API的事件 bindAppEvents(); } function bindAppEvents() { // 用事件委托方式绑定,适配jQuery Mobile的页面切换 $(document).on("submit", "#form_login", function(e) { e.preventDefault(); var username = $("#textinput-hide_login").val(); var password = $("#textinput-hide_password").val(); if (username === "1308" && password === "1308") { navigator.notification.alert('登录成功!', alertDismissed, '设备就绪', '确定'); } else { navigator.notification.alert('凭据无效,请重试。', alertDismissed, '登录失败', '确定'); } }); $(document).on("click", "#hide_password", function() { navigator.notification.alert('你已准备好使用应用!', alertDismissed, '设备就绪', '确定'); }); } function alertDismissed() { // 弹窗确认后的回调逻辑,按需补充 }
2. 确认Dialogs插件已安装
navigator.notification属于Cordova的Dialogs插件,必须确保已正确安装:
cordova plugin add cordova-plugin-dialogs
如果之前安装过但仍有问题,可重新安装修复:
cordova plugin remove cordova-plugin-dialogs && cordova plugin add cordova-plugin-dialogs
3. 测试环境注意事项
必须在真实Android设备或模拟器上测试,浏览器环境无法调用Cordova原生API;可以通过Android的Logcat日志查看具体错误,比如插件未加载、API未定义等信息。
内容的提问来源于stack exchange,提问作者Luannerva
相关产品推荐
相关产品推荐

