如何禁用MScrm 365本地版弹出表单后的页面刷新?
解决Dynamics 365本地版弹出表单后原页面刷新的问题
方法1:自定义弹出按钮替代原生功能
原生「pop out this form」按钮的默认逻辑包含页面刷新,可通过自定义按钮实现无刷新弹窗:
- 进入解决方案,打开对应实体的表单编辑器,在表单工具栏添加自定义按钮
- 为按钮配置JavaScript脚本,使用
Xrm.Navigation.openForm方法实现弹窗,同时阻止原页面默认刷新:
function openFormWithoutRefresh(executionContext) { var formContext = executionContext.getFormContext(); var entityId = formContext.data.entity.getId(); var entityName = formContext.data.entity.getEntityName(); Xrm.Navigation.openForm({ entityName: entityName, entityId: entityId }, { openInNewWindow: true, height: 800, width: 1200 }); // 阻止按钮默认行为,避免页面刷新 executionContext.getEventArgs().preventDefault(); }
- 保存并发布自定义按钮,可选择隐藏原生弹出按钮
方法2:拦截原生按钮点击事件
若不想替换原生按钮,可通过Web资源修改其行为:
- 创建JavaScript Web资源,在表单加载时注入脚本监听原生按钮点击:
function onFormLoad(executionContext) { setTimeout(function() { // 定位原生弹出按钮(需根据实际DOM结构调整选择器) var popOutBtn = document.querySelector("button[aria-label='pop out this form']"); if (popOutBtn) { popOutBtn.addEventListener("click", function(e) { e.preventDefault(); e.stopPropagation(); var formContext = executionContext.getFormContext(); Xrm.Navigation.openForm({ entityName: formContext.data.entity.getEntityName(), entityId: formContext.data.entity.getId() }, {openInNewWindow: true}); }); } }, 1000); // 延迟执行确保DOM加载完成 }
- 将该Web资源添加到表单的表单加载事件,保存并发布
注意事项
- 自定义脚本需遵循Dynamics 365开发规范,避免直接操作DOM引发的版本兼容性问题
- 测试时覆盖新建、编辑等场景,确保弹窗正常且原页面无刷新
- 本地版操作需注意解决方案的发布权限,保证功能在所有环境生效
内容的提问来源于stack exchange,提问作者Damkulul
相关产品推荐
相关产品推荐

