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

修改ContentTools提交逻辑后仍弹出‘Leave Site?’提示的求助

解决ContentTools保存时仍弹出“Leave site”提示的问题

我来帮你搞定这个头疼的问题——你遇到的是ContentTools编辑器自带的页面离开防护机制在搞鬼,不是单纯重置window.onbeforeunload就能解决的,而且你的代码里还有个小细节错误,先给你拆解清楚:

核心问题分析

ContentTools为了防止用户意外丢失修改,内部封装了自己的页面卸载监听逻辑,它不是直接把函数绑定到window.onbeforeunload上,而是通过ContentTools.Toolkit.preventUnload()来启用提示,所以你手动设置window.onbeforeunload = null根本触及不到它的内部绑定。另外,你的代码里if($form.length)判断是错的:document.getElementById返回的是单个DOM元素,不是jQuery集合,$form.length永远是undefined,导致你的提交逻辑根本没执行!

具体修复步骤

1. 修正DOM元素判断

把if($form.length)改成if($form),确保提交逻辑能进入执行。

2. 调用ContentTools内置的允许卸载方法

在提交表单前,先调用ContentTools.Toolkit.allowUnload(),彻底清除编辑器内部的离开提示绑定。

3. 调整代码顺序

正确的执行顺序应该是:清除编辑器防护 → 重置window事件 → 构建表单数据 → 提交表单。

修改后的完整代码

var $form = document.getElementById("form-contenttools");
if ($form) {
    // 清除ContentTools内部的页面离开防护
    ContentTools.Toolkit.allowUnload();
    // 重置window的beforeunload事件
    window.onbeforeunload = null;
    
    // 构建隐藏输入框
    var hiddeninput = document.createElement("INPUT");
    hiddeninput.setAttribute("type", "hidden");
    hiddeninput.setAttribute("name", "document");
    hiddeninput.setAttribute("value", regions[0]);
    
    var form_submit_flag = document.createElement("INPUT");
    form_submit_flag.setAttribute("type", "hidden");
    form_submit_flag.setAttribute("name", "contenttools_form_submit");
    form_submit_flag.setAttribute("value", true);
    
    // 添加到表单并提交
    $form.appendChild(hiddeninput);
    $form.appendChild(form_submit_flag);
    editor.busy(false);
    new ContentTools.FlashUI('ok');
    $form.submit();
}

额外排查点

如果还是有问题,可以再检查这两点:

  • 确认editor实例是正确初始化的,比如你是不是通过editor = ContentTools.EditorApp.get();获取的实例?
  • 要是仍有残留提示,可以在allowUnload()之后再加一句editor.stop(),停止编辑器的所有监听(不过一般不需要这一步)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 12:17:47