1

我在这里环顾四周,看到了如何通过实例化一个新窗口并在那里移植标记来使用 javascript 打印 div 的内容的绝妙解决方案。
我在 SharePoint 中使用该解决方案的问题是 SP.*.js 库异步加载,它会冻结打印对话框屏幕或浏览器本身。
有人能够解决这个问题吗?

4

3 回答 3

2

使用 sharepoint,您可以使用ExecuteOrDelayUntilScriptLoaded等到加载 SP.js 以确保没有冻结。

<script type="text/javascript">
  function printPage(){
  }
  window.onload = function(){ ExecuteOrDelayUntilScriptLoaded(printPage, "sp.js"); };
</script>
于 2012-08-14T04:04:38.753 回答
1

下面给出的代码适用于 sharepoint、ASPX 页面和任何浏览器。我用 Sharepoint 2010 Visual webparts 测试了代码,它就像一个魅力。

将此 Javascript 代码放在您的 webpart ASCX 文件中

    <script type="text/javascript">
       function printPartOfPage(elementId) {
        var printContent = document.getElementById(elementId);
        var windowUrl = '';
        var uniqueName = new Date();
        var windowName = 'Print' ;
        var printWindow = window.open(windowUrl, windowName, 'left=-20,top=-20,width=0,height=0');
        printWindow.document.write('<HTML><Head><Title></Title>');
        printWindow.document.write('</Head><Body style="margin-left:50px;margin-top:50px;font-size:10pt;">');
        printWindow.document.write(printContent.innerHTML);
        printWindow.document.write('</Body></HTML>');
        printWindow.document.close();
        printWindow.focus();
        printWindow.print();
        printWindow.close();
    }

</script>

& 更新打印按钮 ClientClick 事件

   <img alt="" src="~/_layouts/images/WebpartCollection/Printer-30X30.jpg" 
onclick="JavaScript:printPartOfPage('YourDivClientID');" />

我希望这会帮助你。

于 2012-08-15T17:42:32.970 回答
1

我不具体了解 SharePoint,因此无法提供具体示例。但是,听起来您正在考虑一种技术,例如另一个 stackoverflow question中概述的技术。

请注意,这是将顺序执行的所有代码块。所以我们打开一个窗口,设置标记并立即打印。在这些步骤之间无需等待。

我建议您此时不要调用 print,而是打开窗口,设置标记并在新窗口标记中注入更多 javascript。这个新注入的 javascript 将是实际打印发生的地方。

注入的脚本应该有一些逻辑来等待某些脚本资源完成加载,然后它会调用window.print(). 显然window.onload在所有资源完成加载之前不会触发。(在加载所有内容或加载失败之前,onload 不会触发)。这是关于 stackoverflow 的 jquery 示例。脚本也按照出现在标记中的顺序执行。因此,如果您注入的打印窗口 JavaScript 是最后一个,那么它上面的所有其他脚本都必须已经完成。(因此,SharePoint 在标记中注入的任何内容都应该已经执行)。

对于奖励积分,如果一切顺利,您可以在新的打印窗口上注入一个“加载掩码”,然后在您的 javascript 执行它之前隐藏掩码window.print()

于 2012-08-10T16:44:23.843 回答