【问题标题】:Window.print() does not workWindow.print() 不起作用
【发布时间】:2012-07-10 04:35:31
【问题描述】:

为什么这不起作用?仅加载页面。不打印。在这里,我获取 iframe 的 src 并在新窗口中打开该 url。

var myDivObj = document.getElementById('resumedocument').src;
var someXml = '<html><title>Resume</title><body onload="window.print();"><iframe style="height: 1000px; width: 1260px;" src="' + myDivObj + '"/></body></html>';
var printwindow = window.open('', '_blank','fullscreen=yes');
printwindow.document.write(someXml);
printwindow.onload = function() {                               
   printwindow.self.focus();
   printwindow.self.print();
};

【问题讨论】:

  • 你在上面调试了什么?
  • 我会假设这个,一方面,没有定义。 document.getElementById('resumedocument').src
  • why does this not work 不是在 SO 上发帖的正当理由。需要展示一些作品。
  • 检查浏览器的 javascript 控制台是否有错误..
  • @史蒂夫:只有当我得到有效的答案时,我才会接受答案。我认为这是正确的方法:)

标签: javascript printing window


【解决方案1】:

替换这一行:

printwindow.onload = function() {                               
    printwindow.self.focus();
    printwindow.self.print();
};

用这一行:

printwindow.document.getElementsByTagName('iframe')[0].onload = function () {
    printwindow.self.focus();
    printwindow.print();
};

【讨论】:

    【解决方案2】:

    您不需要在 onload 中执行此操作,因为您正在执行自己的 document.write。以下代码作为示例:

        var someXml = '<html><body>Stuff</body></html>';
        var printwindow = window.open('', '_blank','fullscreen=yes');
        printwindow.document.write(someXml);
        printwindow.print();
    

    我认为您的问题是加载文档时在 window.open 方法期间会触发 onload。此时您的文档是 '',因此没有处理程序。

    要等待 IFRAME 加载,您需要将 onload 处理程序移到那里。例如:

        var someXml = '<html><body><iframe id=Frame width="800" height="800" src="http://jsfiddle.net" /></body></html>';
        var printwindow = window.open('', '_blank','fullscreen=yes');
        printwindow.document.write(someXml);
        printwindow.document.getElementById('Frame').onload = function () {
            printwindow.self.focus();
            printwindow.print();
        };​
    

    【讨论】:

    • 是的。我试过这个。打印没问题。但总是得到空白页
    • document.write() 正在编写一个 iframe,我认为 OP 希望在打印之前等待 iframe 加载其内容。 (但 iframe 父级上的 onload 不会等待 iframe。)
    • Here 是在 jsfiddle.net 上工作的那个 - 你能发布一个不用于比较的那个吗?实际上我看到你已经接受了一个答案,所以我想你现在已经开始工作了。
    • 是的。 Sheikh Heera 也提供了相同的链接。谢谢。
    • 嗨,我在这里找到了一个 - jsfiddle.net/Q5Xc9/7。它适用于除我之外的所有其他链接。我的链接是localhost:8080/hiringsteps/docs/Keneth_1340800082258/…
    【解决方案3】:
    var url = document.getElementById('resumedocument').src;
    var printwindow = window.open('', '', 'fullscreen=yes');
    printwindow.document.write('<iframe width="100%" height="100%" onload="window.print()" src='+url+'></iframe>');
    

    【讨论】:

    • @Heera:非常感谢。我得到了印刷品。但是问题。当我关闭窗口时会显示打印弹出窗口。
    • 欢迎,您是说打印对话框吗?
    • 是的。我的意思是在关闭新窗口时会弹出打印对话框。
    • 我用谷歌搜索了你,但一无所获,here
    • 使用jqprint(jquery插件)很容易,google一下,从单元格回复,所以不能给出url,但很快就会在这里。
    【解决方案4】:

    您是否尝试过没有自我,如printwindow.print()

    【讨论】:

    • 我不建议您使用未经自己测试的代码发布答案。
    • printwindow.self.print(); 行本身应该可以工作。我认为问题更多在于何时/是否执行该行。
    【解决方案5】:

    注意https://developer.mozilla.org/en-US/docs/Web/API/Window/print#Notes

    从 Chrome 46.0 开始,此方法在 &lt;iframe&gt; 中被阻止,除非其沙盒属性的值为 allow-modals

    【讨论】:

      猜你喜欢
      • 2011-02-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-11
      • 2012-10-28
      • 1970-01-01
      • 1970-01-01
      • 2023-03-13
      相关资源
      最近更新 更多