Есть ли какая-либо причина, по которой window.matchMedia('screen') вернул бы false в веб-браузере?
Я запускаю следующий код:
var hasMatchMediaSupport = (typeof window.matchMedia !== 'undefined') ? !!window.matchMedia('screen').matches : false;
Есть ли причина, по которой эта проверка вернула бы ложь? Это происходит только в браузерах Firefox в самых разных операционных системах. Одна важная деталь заключается в том, что этот код выполняется внутри рекламного блока, иногда внутри рекламных блоков HTML5.
Это происходит в Windows 7, Windows 8, Windows 10, Mac OS X 10.8 и некоторых других операционных системах с версиями Firefox от 36 до 41.
Изменить: нашел этот отчет об ошибке здесь и смог скопировать в Firefox 41 на Mac OS X 10.10 - matchMedia не работает правильно внутри скрытых фреймов.
1 ответ
Ошибка была исправлена, чтобы теперь возвращать ненулевое значение. Например:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<style>
.hidden { display: none; }
</style>
</head>
<body>
<iframe class="hidden" src="data:text/html;charset=utf8;,<script>document.title = window.matchMedia('screen').matches;alert(document.title)</script>" height="200" width="200"></iframe>
</body>
</html>
Рекомендации