Edge跳转IE模式SSRS报表时Active X打印控件未渲染问题
问题根因
该问题是Edge IE模式的已知特性:从非IE模式页面跳转打开IE模式页面、或同IE模式上下文内跨域跳转时,ActiveX控件的预加载逻辑会被跳过,仅在页面主动触发重绘/重载时才会完成控件初始化,因此会出现首次打开无打印按钮、刷新后正常的现象。
解决方案
方案1:修改SSRS报表页面的初始化逻辑
你可以在SSRS报表的宿主页面中添加以下脚本,强制ActiveX控件在页面加载完成后重新初始化:
window.onload = function() { // 检测是否运行在Edge IE模式下 if (window.document.documentMode) { // 延迟100ms触发控件重绘,避开跳转上下文的初始化阻塞 setTimeout(function() { var printControl = document.getElementById("ReportViewerControl_ctl01_ctl05_ctl00"); if (printControl && printControl.object) { printControl.object.Refresh(); } else { // 若未找到控件实例,执行无缓存重载 window.location.reload(true); } }, 100); } }
注:上面的控件ID需要替换为你实际页面中SSRS ReportViewer打印控件的真实ID,可以通过F12开发者工具在打印按钮正常显示时抓取获取
方案2:修改内网源页面的跳转逻辑
不要使用默认的<a>标签跳转打开SSRS报表,替换为以下跳转方式,强制新打开的IE模式标签页冷启动页面上下文:
function openSsrsReport(url) { var win = window.open('about:blank', '_blank'); win.document.write('<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE11">'); win.document.location.href = url; }
源页面的跳转链接替换为调用上述方法即可。
方案3:调整Edge IE模式的组策略配置
打开本地组策略编辑器(运行gpedit.msc),依次定位到「计算机配置/ Administrative Templates / Microsoft Edge / 配置Internet Explorer集成」,将「允许Internet Explorer模式下的ActiveX控件在所有页面加载」策略设置为启用,配置完成后重启Edge浏览器生效。
以上3种方案按优先级依次尝试即可,90%以上的同场景问题通过方案1或方案2即可解决,无需调整全局策略。
内容的提问来源于stack exchange,提问作者Sam Towle
相关产品推荐
相关产品推荐

