1

这可能是 Chrome 的一个特定问题,我应该将其带到他们的论坛,但我想看看是否有替代解决方案或修复。我们将backbone.js 用于我们的单页应用程序并打印,我们创建一个新窗口,将我们的html 写入其中,然后在新窗口上调用print。如果用户在没有关闭打印对话框的情况下关闭选项卡,则在 Backbone.History 对象中不再触发 hashchange 和 popstate 事件。您也无法刷新页面。我们必须关闭页面并在新选项卡中重新打开才能重新启动。这个错误不会发生在 linux 版本上,只会发生在 windows 上。如果用户先关闭打印对话框然后关闭选项卡,则一切正常。

理想的解决方案是让 hashchanges 继续工作。如果这不可能,是否有另一种解决方案来打印 HTML 的某个部分?

我尝试编写一个在新窗口中调用 window.print() 的脚本,但它不会触发甚至抛出错误。IFrame 将不起作用,因为单页应用程序的 css 将覆盖打印部分 html。欢迎任何解决方案。

这是一个向您展示问题的jsfiddle。

http://jsfiddle.net/5P4qv/3/

window.document.getElementById('run_print').onclick = function () {
    window.onhashchange = function () {
        console.log('hashchanged');
    };
    window.location.hash = 'test';
    windowObject = window.open("", "_blank");
    windowObject.document.open();
    windowObject.document.close();
    windowObject.focus();
    windowObject.print();
};

您可能需要允许弹出窗口才能正常工作。单击打印按钮,弹出窗口将打开打印对话框。关闭窗口而不关闭打印对话框,原始窗口将像仍在加载一样。您也将无法刷新。同样,这仅适用于 Windows 中的 Chrome。

4

0 回答 0