如何在deviceready事件触发后调用DOMContentLoaded,使functionB在functionA之后执行?
解决方案
核心思路是放弃DOMContentLoaded触发functionB的逻辑,转而在onDeviceReadyfunctionA里的Cordova插件异步响应完成后,再主动调用functionB。
具体修改方式
- 删除
DOMContentLoaded的监听代码,避免functionB提前执行 - 根据Cordova插件的异步类型(回调/Promise),把
functionB()放在插件响应完成的代码块里
示例1:插件使用回调函数的情况
// 监听deviceready事件 document.addEventListener("deviceready", onDeviceReadyfunctionA, false); function onDeviceReadyfunctionA() { // 调用Cordova插件,假设插件方法接受成功/失败回调 cordovaPlugin.someAsyncMethod(function(pluginResponse) { // 插件响应完成后,执行functionB functionB(); }, function(error) { // 可选:处理插件调用失败的场景,按需决定是否执行functionB console.error("插件调用出错:", error); }); } // 保留原functionB逻辑 function functionB() { // 你的业务代码 }
示例2:插件返回Promise的情况
document.addEventListener("deviceready", onDeviceReadyfunctionA, false); async function onDeviceReadyfunctionA() { try { // 调用返回Promise的插件方法 const pluginResponse = await cordovaPlugin.someAsyncMethod(); // 插件响应完成后执行functionB functionB(); } catch (error) { console.error("插件调用出错:", error); } } function functionB() { // 你的业务代码 }
逻辑说明
DOMContentLoaded的触发时机早于Cordova的deviceready事件,而且Cordova插件调用基本都是异步操作,只有等插件返回结果后再执行依赖它的functionB,才能保证业务逻辑的正确性。
内容的提问来源于stack exchange,提问作者vasanthangel4
相关产品推荐
相关产品推荐

