屏幕键盘后,ios视口初始尺度不受尊重

时间:2013-08-06 17:53:06

标签: javascript html ios css

我有一个非响应式页面,我需要通过iframe包含。 为了显示整个iframe,我使用javascript动态设置视口宽度和比例。 当我准备关闭iframe时,我重置了视口宽度并缩放到原始值。

通常情况下这很好。 但是,如果打开屏幕键盘(例如在文本输入焦点上),iOS拒绝遵守任何进一步的缩放。它将尊重视口大小,而不是初始规模。 有趣的是,如果你旋转设备,它最终将遵循初始规模。

我认为这可能只是一个iOS错误。任何建议都将不胜感激。

1 个答案:

答案 0 :(得分:0)

所以似乎诀窍就是再次触发键盘。键盘打开后,您设置的视口比例将立即得到兑现。

让键盘弹出说起来容易做起来难。基本上你必须处理一个真正的点击事件或鼠标事件,然后直接从点击处理程序(http://jsfiddle.net/DLV2F/87/)触发文本输入焦点。

<input>
<p id="click">Click handler</p>
<p id="click-timeout">Click handler setting timeout</p>
<p id="mousedown">Mousedown handler</p>
<p id="mousedown-timeout">Mousedown handler setting timeout</p>
<p id="mouseup">Mouseup handler</p>
<p id="mouseup-timeout">Mouseup handler setting timeout</p>
<p id="extern-click-trigger">Clicking here will trigger click on the first 'Click Handler'</p>
<p id="tap">Virtual 'TAP' handler</p>
<p id="tap-triggering-click">Virtual 'TAP' handler triggering click on the first 'Click handler'</p>

<script>
function focus() {
    $('input').focus();
}
$(focus);
$(function() {
    $(document.body).load(focus);
    $('#click').click(focus);
    $('#click-timeout').click(function() {
        setTimeout(focus);
    });
    $('#mousedown').mousedown(focus);
    $('#mousedown-timeout').mousedown(function() {
        setTimeout(focus);
    });
    $('#mouseup').mouseup(focus);
    $('#mouseup-timeout').mouseup(function() {
        setTimeout(focus);
    });
    $('#extern-click-trigger').click(function() {
        $('#click').click();
    });
    $('#tap').bind('tapone', function() {
        focus();
    });
    $('#tap-triggering-click').bind('tapone', function() {
        $('#click').click();
    });

});
</script