Safari 忽略 window.matchMedia

Posted

技术标签:

【中文标题】Safari 忽略 window.matchMedia【英文标题】:Safari ignore window.matchMedia 【发布时间】:2021-09-07 15:06:48 【问题描述】:

我使用 window.matchMedia 条件来避免在移动设备中注入视频。 Here 它表示自 Safari 9 以来 matchMedia 将顺利运行(我正在对其进行测试),但我的代码被完全忽略:

if ( window.matchMedia("(min-width: 1025px").matches) 
   console.log('match');

   document.addEventListener("DOMContentLoaded", function()  initialiseMediaPlayer(); , false);

   function initialiseMediaPlayer() 

      (stuff here...)

   


此代码在 Chrome、Chromium、Firefox、IE 和 Edge 上完美运行。

有人遇到过类似的问题吗?

【问题讨论】:

【参考方案1】:

问题在于格式,奇怪的是其他浏览器会修复该行为,即使它格式错误。它在 1025px 之后缺少一个额外的结束“)”括号。试试:

if ( window.matchMedia('(min-width:1025px)').matches) 
   console.log('match');

   document.addEventListener("DOMContentLoaded", function()  initialiseMediaPlayer(); , false);

   function initialiseMediaPlayer() 

      (stuff here...)

   


【讨论】:

不用担心,很高兴知道其他浏览器会修复它而 safari 没有 :) 这是真的!我花了将近一个星期没有注意到丢失的支架!但是我在 chrome 和 Firefox 上进行开发,而那个支架对我来说几乎是不可见的,为什么它在所有环境中都可以工作,而不是在 safari 中;)啊哈哈哈哈不错!!! 这也帮助我找到了我的问题。除了我的测试人员在 iPhone 上使用 Chrome。确实很奇怪。【参考方案2】:

对于可能遇到类似问题的其他人,我发现在 Safari 中您需要包括“屏幕和”以及宽度设置。其他浏览器似乎假设您正在谈论屏幕宽度,但 safari 需要指定它,至少在我的情况下。所以会是这样的:

if ( window.matchMedia('screen and (min-width:1025px)').matches) 

在这种情况下

【讨论】:

【参考方案3】:

在我的例子中,Safari 在 mediaQueryList 上使用 .addListener() 而不是 addEventListener()

【讨论】:

【参考方案4】:

如果有人也遇到了这个问题,在我的情况下,问题是,Safari 没有 MediaQueryList 接口上的 .onchange 属性。 这刚刚在 Safari 14 中得到解决,但该版本相当新,因此如果您想确保向后兼容性,请使用(已弃用的).addListener

来源:https://developer.mozilla.org/en-US/docs/Web/API/MediaQueryList/onchange

【讨论】:

以上是关于Safari 忽略 window.matchMedia的主要内容,如果未能解决你的问题,请参考以下文章

Safari 忽略 html5 视频静音属性

忽略溢出的 CSS 不透明度过渡:隐藏在 Chrome/Safari 中

移动 Safari 忽略了我的自动对焦 jQuery 事件?

Safari 9(在 iOS9 中)忽略 CSS 设置

css CSS:移动Safari FIX中忽略了溢出-x值

<textarea> 占位符的换行符 \n 在 Safari 上被忽略