Настройки виджета Android "user-scalable = no" ломают ширину/масштаб уровня просмотра

Я работаю над веб-приложением шириной 640 пикселей.

В документе head я установил

  <meta name="viewport" content = "width=640, user-scalable=no" />

чтобы контент был хорошо отображен и растянут горизонтально.
Это отлично работает на iOS, но в Android браузер расширяет веб-сайт, поэтому пользователю нужно дважды щелкнуть, чтобы уменьшить масштаб и всю страницу.

Когда я изменяю параметр видового экрана, чтобы оставить тег user-scalable следующим образом:

<meta name="viewport" content="width=640" />

браузер Android отлично подстраивается под режим 640px, поэтому он работает.
В настоящее время проблема заключается в том, что пользователи могут увеличивать и уменьшать масштаб на Android и iOS, поскольку тег user-scalable не установлен.

Как я могу запретить масштабирование и в то же время установить ширину видового экрана на 640 пикселей на Android?

Ответ 1

Попытка рендеринга метатега просмотра в виде:

    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />

Настройка параметров шкалы устанавливает ограничения пользователя на то, как далеко они могут масштабироваться, и поэтому, если вы установите начальную и максимальную значения на одну и ту же сумму, это должно устранить проблему.

ОБНОВЛЕНИЕ. Я смог исправить ошибку для устройств Android вместе, установив ниже:

<meta name="viewport" content="width=640px, initial-scale=.5, maximum-scale=.5" />

Я также заметил, что некоторый контент, такой как p-теги, не течет по экрану, поэтому взломать это было бы добавление свойства background-image с пустой строкой в ​​любое содержимое, которое застряло и не пересекало вид макета. Надеюсь, это поможет вам на этот раз.

Ответ 2

Я хотел, чтобы мобильный всегда показывал сайт шириной 640 пикселей из-за конструкции, которая нарушала бы иначе. (дизайн, который я не делал..) Таким образом, я хотел отключить масштабирование для мобильных пользователей. Для меня работала следующая:

- ОБНОВЛЕНО 2013-10-31

Прежде всего, вы не можете сделать это без Javascript. Вам нужно будет проверить строку пользовательского агента. Поэтому я создал mobile-viewport.js и включил script непосредственно перед закрывающим тегом:

function writeViewPort() {
    var ua = navigator.userAgent;
    var viewportChanged = false;
    var scale = 0;

    if (ua.indexOf("Android") >= 0 && ua.indexOf("AppleWebKit") >= 0) {
        var webkitVersion = parseFloat(ua.slice(ua.indexOf("AppleWebKit") + 12));
        // targets android browser, not chrome browser (http://jimbergman.net/webkit-version-in-android-version/)
        if (webkitVersion < 535) {
            viewportChanged = true;
            scale = getScaleWithScreenwidth();
            document.write('<meta name="viewport" content="width=640, initial-scale=' + scale + ', minimum-scale=' + scale + ', maximum-scale=' + scale + '" />');
        }
    }

    if (ua.indexOf("Firefox") >= 0) {
        viewportChanged = true;
        scale = (getScaleWithScreenwidth() / 2);
        document.write('<meta name="viewport" content="width=640, user-scalable=false, initial-scale=' + scale + '" />');
    }

    if (!viewportChanged) {
        document.write('<meta name="viewport" content="width=640, user-scalable=false" />');
    }

    if (ua.indexOf("IEMobile") >= 0) {
        document.write('<meta name="MobileOptimized" content="640" />');
    }

    document.write('<meta name="HandheldFriendly" content="true"/>');
}

function getScaleWithScreenwidth() {
    var viewportWidth = 640;
    var screenWidth = window.innerWidth;
    return (screenWidth / viewportWidth);
}

writeViewPort();

script проверяет, есть ли у посетителя андроид (не хром) или браузер Firefox. Браузер Android не поддерживает комбинацию width = 640 и user-scalable = false, а браузер Firefox имеет двойную ширину экрана по какой-то странной причине. Если у посетителя установлен браузер IE для браузера Windows MobileOptimized.

Ответ 3

У меня была такая же ситуация, если вы хотите, чтобы контент всегда соответствовал ширине экрана, не позволяя пользователю увеличивать/уменьшать масштаб, используйте следующие метатеги (это будет работать независимо от того, какую ширину вы дадите)

 <meta name="viewport" content="initial-scale=1.0, user-scalable=no" />