【问题标题】:Firefox isn't redirecting after window.print();Firefox 在 window.print() 之后没有重定向;
【发布时间】:2019-09-04 04:28:35
【问题描述】:

我有一个带有按钮的网页,我想打印该页面然后重定向到另一个页面。但是,使用 Firefox 66,如果我通过打印,它不会重定向。如果我取消打印,它会重定向就好了。

代码如下:

<SCRIPT LANGUAGE="JavaScript">
  function myprint() {
    window.print();
    window.location='mypage.php';
  }
</script>

<a><button onClick="myprint(); return false;">Print ticket</button></a>

如果我删除 window.print(); 行,它可以正常工作,但在实际打印时,它不会。也适用于 Chrome、Edge 甚至 IE11,但不适用于 Firefox。

我错过了什么吗?

更新:这不仅仅是我的电脑。其他人的电脑在 Firefox 上也是如此……

【问题讨论】:

    标签: javascript firefox redirect printing window.location


    【解决方案1】:

    首先,您的代码应该可以工作,但(方式)更好的版本是:

    <SCRIPT LANGUAGE="JavaScript">
      function myprint() {
        window.onafterprint = function(event) {
            window.location.href = 'index.php'
        };
    
        window.print();
      }
    </script>
    
    <a><button onClick="myprint(); return false;">Print ticket</button></a>
    

    您创建一个函数的地方应该在打印完成后触发。 除 safari 之外的所有浏览器都支持此事件 (window.onafterprint)(编辑:是的,from MDN

    现在,出于某种原因,此代码不适用于 Firefox 66.0.3 64 位(在我的情况下),但可以完美地用于 IE11 和 Chrome 73。

    嗯,实际上,如果您在询问时取消打印,它有效,但如果您实际打印,则不会。

    一种解决方法是使用另一个事件onbeforeprint,它会在打印之前更改页面(想法是在打印之前删除诸如广告之类的内容,然后使用 onafterprint 来恢复页面)。 当我尝试时,它似乎打印第一页而不是第二页,所以这个事件也被打破了。

    这种方法似乎行得通。

    <SCRIPT LANGUAGE="JavaScript">
      function myprint() {
        window.onbeforeprint = function(event) {
            window.location.href = 'index.php'
        };
    
        window.print();
      }
    </script>
    
    <a><button onClick="myprint(); return false;">Print ticket</button></a>
    

    【讨论】:

    • Firefox 65(在 ubuntu 18.04 机器上)显示相同的行为:onBeforePrint 似乎真的是唯一的方法。
    • 这真是太疯狂了……除非我误解了 onbeforeprint 应该如何工作。我实际上事先尝试了onafterprint,没有好的结果。以为我快疯了。谢谢。
    • 那么,Firefox 中 onafterprint 的目的是什么?因为 onafterprint 在所有其他浏览器中都可以正常工作。
    • 我在 google 上进行了快速搜索,我很确定它是 bug。一个非常古老的错误,似乎是。至于这两个事件的行为,你可以在MDN上阅读:The beforeprint and afterprint events allow pages to change their content before printing starts (perhaps to remove a banner, for example) and then revert those changes after printing has completed.
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-11
    • 1970-01-01
    相关资源
    最近更新 更多