У меня есть сайт с полноэкранным iframe.Чтобы быть точным в некоторых условиях, iframe может изменить размер на полный экран (под полным экраном я не имею в виду requestFullScreen
, просто модальный div, который имеет фиксированную позицию и top, bottom. Left, right = 0) Источник iframe одинаков, about:blank
поэтому у меня есть доступ к контексту хоста.
Я хочу отключить масштабирование внутри iframe, но оставляю опции масштабирования такими, как они есть на странице хоста для мобильных устройств.Согласно этому ответу, я могу использовать
<meta name='viewport' content='width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0'/>
К сожалению, приведенный выше тег работает на странице хоста, но не внутри iframe.Может быть, я могу preventDefault
какие-то события масштабирования внутри iframe?
Я также пытался редактировать метатег во время выполнения, но он нарушает поведение по умолчанию:
На странице хоста:
let viewPort = document.querySelector('meta[name=viewport]');
let content = '';
if (viewPort) {
content = viewPort.getAttribute('content') || '';
}
// trigger this function from iframe when full screen mode changes:
window.fsChange = (isOpened) => {
if (isOpened) {
if (!viewPort) {
viewPort = document.createElement('meta');
viewPort.setAttribute('name', 'viewport');
document.head.appendChild(viewPort);
}
viewPort.setAttribute('content', 'width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no');
} else {
if (viewPort) {
viewPort.setAttribute('content', content);
}
}
}
Когда я устанавливаю содержимое метатега и удаляю его после, настройки не будут откатываться.Например, я установил width=device-width
и user-scalable=0
, а затем установил для содержимого ''
масштабирование будет отключено, а ширина страницы будет равна ширине устройства.