ASP.NET Core 6中Edge浏览器Bootstrap Popover报sanitizeFn类型错误求助
Edge中Bootstrap Popover sanitizeFn类型错误的解决办法
错误原因
这个Edge专属错误的核心是全局环境里的sanitizeFn变量被意外覆盖成了window对象。Bootstrap 4的Tooltip/Popover组件初始化时,会严格校验sanitizeFn的类型,要求它必须是null或函数类型,一旦检测到类型为window就会抛出类型错误。
你之前尝试关闭sanitize选项无效,是因为即便关闭sanitize功能,Bootstrap仍然会读取并校验sanitizeFn的类型,只要全局的sanitizeFn被污染,错误就会触发。这种污染通常来自Edge的第三方扩展注入,或是该版本Edge的内置特性意外污染了全局命名空间。
解决办法
1. 初始化时显式指定sanitizeFn
在调用popover()初始化组件时,直接传入sanitizeFn参数,覆盖被污染的全局值:
// 不需要自定义 sanitize 逻辑时,直接设为 null $('[data-toggle="popover"]').popover({ sanitizeFn: null });
如果需要保留内容 sanitize 功能,可以使用Bootstrap内置的 sanitize 函数:
$('[data-toggle="popover"]').popover({ sanitizeFn: $.fn.tooltip.Constructor.Default.sanitizeFn });
2. 排查Edge扩展冲突
关闭Edge的所有第三方扩展,重新加载页面验证错误是否消失。如果错误消失,再逐一开启扩展,找出导致冲突的那个,将其禁用或更新到最新版本。
3. 升级Bootstrap及Popper.js版本
Bootstrap 4.3.1属于旧版本,后续的4.6.x版本修复了不少这类兼容性问题。替换原引用为兼容的稳定版本:
<!-- 可选升级jQuery到兼容的最新版 --> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.7.1/jquery.min.js"></script> <!-- 替换Popper.js为Bootstrap 4.6.x兼容的版本 --> <script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.1/dist/umd/popper.min.js"></script> <!-- 替换Bootstrap为4.6.x最新稳定版 --> <script src="https://cdn.jsdelivr.net/npm/bootstrap@4.6.2/dist/js/bootstrap.min.js"></script>
内容的提问来源于stack exchange,提问作者TheItCrOw
相关产品推荐
相关产品推荐

