修改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
相关产品推荐
相关产品推荐

