You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 19:55:13