SharePoint 2013页面window.print()无法触发打印弹窗问题咨询
嘿,我帮你排查了下问题,有两个关键问题导致打印窗口弹不出来,咱们一步步解决:
首先,最明显的低级错误——你的打印按钮事件绑定写错了!应该用onclick而不是click,这个直接导致按钮点击完全没反应。
修正后的打印按钮代码:
<button type="button" onclick="printCard()">Print card</button>
不过就算修正了这个,你原来的printCard函数在SharePoint环境里还是容易出问题——直接替换document.body.innerHTML会彻底破坏SharePoint页面自带的母版页结构、脚本和样式,这不仅可能让打印窗口无法触发,还会导致打印后页面直接废掉。
更适合SharePoint的打印方案
咱们换一种更安全的方式:用隐藏的iframe来承载要打印的内容,完全不干扰原页面的结构,稳定性高很多。修改你的printCard函数如下:
function printCard() { // 获取卡片的HTML内容 var cardContent = document.getElementById("card").innerHTML; // 创建一个隐藏的iframe元素 var printFrame = document.createElement('iframe'); printFrame.style.display = 'none'; document.body.appendChild(printFrame); // 获取iframe内部的文档对象 var printDoc = printFrame.contentDocument || printFrame.contentWindow.document; // 给iframe写入完整的HTML结构,这里可以加入你的CSS样式保证打印格式 printDoc.write('<html><head><title>ICE Emergency Card</title>'); // 如果有自定义CSS文件,记得在这里引入,比如: // printDoc.write('<link rel="stylesheet" href="/assets/ice_style.css" type="text/css">'); printDoc.write('</head><body>'); printDoc.write(cardContent); printDoc.write('</body></html>'); printDoc.close(); // 等iframe内容加载完成后触发打印,打印完移除iframe printFrame.onload = function() { printFrame.contentWindow.print(); setTimeout(() => document.body.removeChild(printFrame), 1000); }; }
额外的小提示
- 在SharePoint的Script Editor/CEWP里,尽量别直接操作
document.body,母版页的复杂结构很容易被搞崩。 - 如果需要打印出带样式的卡片,一定要在iframe的
<head>里引入你的CSS文件,不然打印出来的内容会没格式。 - 测试的时候可以打开浏览器控制台,手动输入
printCard()执行,看看有没有报错信息,能更快定位问题。
内容的提问来源于stack exchange,提问作者downer
相关产品推荐
相关产品推荐

