window.print在新窗口中打破了windows chrome中的hashchange

时间:2014-04-16 17:18:50

标签: javascript google-chrome backbone.js hashchange popstate

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

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

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

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

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。

0 个答案:

没有答案