Javascript window.print在新窗口中会中断windows chrome中的更改

Javascript window.print在新窗口中会中断windows chrome中的更改,javascript,google-chrome,backbone.js,hashchange,popstate,Javascript,Google Chrome,Backbone.js,Hashchange,Popstate,这可能是Chrome的一个具体问题,我应该带到他们的论坛上,但我想看看是否有其他解决方案或修复方案。我们在单页应用程序中使用backbone.js,为了打印,我们创建了一个新窗口,将html写入其中,然后在新窗口上调用print。如果用户在不关闭打印对话框的情况下关闭选项卡,则不会在Backbone.History对象中触发hashchange和popstate事件。您也无法刷新页面。我们必须关闭页面并在新选项卡中重新打开才能重新启动。 此错误不会发生在linux版本上,只发生在windows上

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

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

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

下面是一个jsfiddle来向您展示这个问题

您可能需要允许弹出窗口以使其正常工作。单击打印按钮,弹出窗口将打开打印对话框。在不关闭“打印”对话框的情况下关闭窗口,原始窗口将如同仍在加载一样。您也将无法刷新。 同样,这仅适用于windows中的Chrome。

请参见此处的解决方案
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();
};