3

我正在尝试在 IE10 中打印动态创建的 iframe。它既不抛出错误也不工作。下面是我的代码。

function PrintVisitSlip() {
    var f = document.getElementById('frmPrintVisitSlip');
    var ifrm = document.createElement("iframe");
    ifrm.src = 'about:blank';
    ifrm.style.display = "none";
    document.body.appendChild(ifrm);
    var _styleCSS = '<style type="text/css">p{border-bottom: white;}.Head{font-size: 9pt;font-weight: bold;}'
        + 'td{border-bottom: 1px solid black;height: 8px;padding: 0px 0px 0px 0px;margin: 0 0 0 0;font-size: 7pt;padding: 1px 0 1px 0;}'
        + '.LC{width: 125px;text-align: left;padding-left: 4px;}.RC{width: 21px;text-align: right;padding-right: 3px;}'
        + '.LC1{width: 80px;text-align: left;padding-left: 4px;font-size: 6.5pt;}.RC1{width: 18px;text-align: right;}</style>';
    ifrm.contentWindow.document.open('text/html', 'replace');
    ifrm.contentWindow.document.write(_styleCSS + f.outerHTML);
    ifrm.contentWindow.document.close();
    var iw = ifrm.contentWindow || ifrm;
    iw.focus();
    iw.print();
    return false;
}

此代码在 chrome 中运行良好。但是在 IE10 中,单击打印按钮时我看不到任何打印窗口。

4

1 回答 1

3

尝试在 的文档为 时打印它readyStateiframe就像completeIEopen.write下的异步一样。此外,ifrm.style.display = "none"防止打印框架,因此打印整个窗口。

以下代码已通过 IE10 验证。它可能不适用于其他浏览器。

<!DOCTYPE html>
<head>
    <title>main</title>
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <script>
        function Go() {
            var ifrm = document.createElement("iframe");

            ifrm.src = 'about:blank';
            ifrm.style.borderWidth = 0;
            ifrm.style.width = 0;
            ifrm.style.height = 0;

            document.body.appendChild(ifrm);

            ifrm.contentWindow.document.open("text/html", "replace");

            ifrm.contentWindow.document.onreadystatechange = function () {
                if (ifrm.contentWindow.document.readyState === "complete") {
                    ifrm.contentWindow.document.body.onafterprint = function () {
                        ifrm.removeNode(true);
                    }
                    ifrm.contentWindow.document.body.focus();
                    ifrm.contentWindow.print();
                }
            }

            ifrm.contentWindow.document.write("<b>Hello</b>, world!");
            ifrm.contentWindow.document.close();
        }
    </script>
</head>
<body>
    <button onclick="Go()">Go</button>
</body>
于 2013-09-25T16:20:23.897 回答