如何从javascript中的弹出窗口打印?

sgl*_*ntz 6 .net javascript printing popup

我有一个.Net应用程序,动态创建一个小的HTML页面,并使用javascript document.open方法在新窗口中弹出它.具有该功能的一切都运行良好.

现在我想在打印页面的HTML页面上添加一个按钮.我尝试使用以下代码无济于事:

<a href='print.html' onClick='window.print();return false;'>
<img src='images/printer.png' height='32px' width='32px'></a>
Run Code Online (Sandbox Code Playgroud)

在弹出窗口中单击按钮时,没有任何反应.但是,当保存此页面的源代码并将其作为单独页面加载到浏览器中时,打印按钮可以正常工作. 所以看起来问题是由代码在弹出窗口中引起的.[问题现在似乎是打开窗口后写入弹出窗口的代码.]有没有人知道解决这个问题或任何替代方法的方法?

编辑:

我试过的其他方法也有同样的结果:

<input type='button' onclick='window.print()' value='Print' />
Run Code Online (Sandbox Code Playgroud)

<a href='javascript:window.print()'>
<img src='images/printer.png' height='32px' width='32px'></a>
Run Code Online (Sandbox Code Playgroud)

再次编辑:

上面的代码适用于Firefox,但不适用于IE7.有关IE的解决方案的任何想法?

再次编辑:

以下是使用npup 发布的代码的测试用例.而不是弹出窗口的代码生活在一个单独的html文件中,我打开一个空白的URL,然后编写代码.此步骤似乎是导致问题的原因.

<html>
<head>
    <title>main</title>
</head>
<body>
    <h1>
        Pop & print</h1>
    <button onclick="pop();">
        Pop</button>

    <script type="text/javascript">
      var POP;
      function pop() {
          var newWin = window.open('', 'thePopup', 'width=350,height=350');
        newWin.document.write("<html><head><title>popup</title></head><body><h1>Pop</h1>" +
            "<p>Print me</p><a href='print.html' onclick='window.print();return false;'>" +
            "<img src='images/printer.png' height='32px' width='32px'></a></body></html>");
      }
    </script>

</body>
</html>
Run Code Online (Sandbox Code Playgroud)

Mar*_*uce 8

这是一个适合我的解决方案:

newWin.document.write( newhtml );
newWin.window.location.reload();    // this is the secret ingredient
newWin.focus();                     // not sure if this line is necessary
newWin.print();
Run Code Online (Sandbox Code Playgroud)

我不是百分之百确定为什么这有效但我认为它与以下之一有关:(1)IE安全问题,(2)范围问题(即在创建新文档后,IE很困惑哪个要打印的文件),或(3)计时问题 - 文件尚未准备好'接受'打印命令.在任何情况下,重新加载后,打印对话框都会出现问题.


sgl*_*ntz 1

我通过使用标准 HTML 标记创建空白 HTML 页面解决了该问题。然后,我通过创建新的 DOM 元素并编辑 innerHTML 来添加内容。生成的代码与示例中的代码相同,只需将 newWin.document.write 命令替换为以下内容:

var newDiv = newWin.document.createElement( 'div' );
newDiv.innerHTML = "<h1>Pop</h1>" +
        "<p>Print me</p><a href='print.html' onclick='window.print();return false;'>" +
        "<img src='images/printer.png' height='32px' width='32px'></a>"
newWin.document.body.appendChild(newDiv);
Run Code Online (Sandbox Code Playgroud)

虽然问题已经解决,但老实说我不确定问题的确切原因是什么。如果有人有任何想法,我很乐意听到。