【问题标题】:Safari window.matchMedia handler not calledSafari window.matchMedia 处理程序未调用
【发布时间】:2017-09-09 05:39:13
【问题描述】:

当 afterPrint 发生时,我需要执行 doSomethingFunc。我的代码在所有浏览器上都运行良好,除了当前的 Safari 版本(OSX 上的 Safari 10.1 和 iOS 10.3 上的 Safari 浏览器)。这两个浏览器似乎没有调用事件侦听器(至少用于打印)。

const mediaQueryPrint = window.matchMedia('print');
mediaQueryPrint.addListener((mql) => {
    if (!mql.matches) {
        setImmediate(doSomethingFunc);
    }
});

window.print();

上面的代码与 OSX Safari 9.1.2 和 iOS 10.2 的 Safari 完美配合。 但不是当前版本。

有人注意到类似的事情吗?还是我必须针对当前 Safari 版本改进我的代码?

我的猜测是,这是一个 Safari 错误,因为在 Safari 10.1 changelog 可访问性一章中有相应的注释。

【问题讨论】:

  • 是的,我也经历过同样的事情——事实证明(在我的情况下)如果打印在一页内,它就会很好地触发处理程序。如果打印超过一页,它会被完全忽略。不过,我还没有发现任何关于它的错误报告。
  • 是的,我猜这个功能不常使用。如果您在 bugreport.apple.com 上写了一份错误报告,我将非常高兴。我也这样做了。可悲的是,苹果对它的错误非常不透明,所以我们不知道苹果是否已经注意到它。

标签: javascript ios safari media-queries matchmedia


【解决方案1】:

你不想打电话吗

        setImmediate(doSomethingFunc);

什么时候

    mql.matches

是真的吗?为什么 '!'那么呢?

【讨论】:

  • 如果你说!mql.matches,你在 afterPrint-Event 期间做事,如果你说mql.matches,你在 beforePrint-Event 期间做事。
  • 只是问问。您最初的问题并未说明您想要 afterPrint-Event。感谢您的反对,现在我了解了有关 SO 工作原理的更多信息。
猜你喜欢
  • 2016-06-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-25
  • 2021-03-18
  • 1970-01-01
相关资源
最近更新 更多