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

Vue JS应用嵌入Marketo Form出现MktoForms2未定义报错如何解决

问题原因及解决方案

核心报错原因

你在created钩子中动态注入的Marketo脚本是异步加载的,脚本下载、解析、执行并在全局挂载MktoForms2对象需要一定时间。如果用户在脚本加载完成前点击按钮触发createForm方法,此时全局还没有生成MktoForms2对象,就会触发MktoForms2 is not defined报错。

修复方案

第一步:新增脚本加载状态标记

在data中新增加载状态变量,监听脚本加载完成事件更新状态:

data() {
  return {
    // 标记Marketo脚本是否加载完成
    isMarketoLoaded: false
  }
},
created() {
  const scriptTag = document.createElement('script');
  scriptTag.src = "//app-ab00.marketo.com/js/forms2/js/forms2.min.js";
  scriptTag.setAttribute('charset', 'utf-8');
  // 脚本加载完成后更新状态
  scriptTag.onload = () => {
    this.isMarketoLoaded = true;
  };
  // 可选:监听加载失败场景做降级处理
  scriptTag.onerror = () => {
    console.error('Marketo表单脚本加载失败,请检查网络或刷新重试');
  };
  document.head.appendChild(scriptTag);
}

第二步:修改createForm方法加兼容判断

调用前先判断脚本是否加载完成,优先从window对象取全局挂载的MktoForms2避免作用域问题:

createForm(){
  // 加载未完成时提前返回,可自定义提示逻辑
  if (!this.isMarketoLoaded || !window.MktoForms2) {
    alert('表单正在加载中,请稍后重试');
    return;
  }
  window.MktoForms2.loadForm("//app-ab00.marketo.com", "785-UHP-775", 1057);
}

可选优化

触发createForm的按钮可以绑定禁用状态,避免用户重复点击无效请求:

<button @click="createForm" :disabled="!isMarketoLoaded">加载表单</button>

内容的提问来源于stack exchange,提问作者user2402492

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 06:06:04