iOS9 - 同じ問題。
TLDR - 問題の原因。解決策については、一番下までスクロールしてください
position:fixed
iframe に id='subscribe-popup-frame' のフォームがありました
元の質問によると、入力フォーカスでは、iframe は画面の上部ではなくドキュメントの上部に移動します。
ユーザーエージェントが idevice に設定されている safari dev モードでは、同じ問題は発生しませんでした。そのため、iOS 仮想キーボードがポップアップしたときに問題が発生したようです。
コンソールが iframe の位置 (例: ) をログに記録することで、何が起こっているかをある程度把握できました。そこから、仮想キーボードがポップアップしたとき (つまり、入力要素にフォーカスしたとき$('#subscribe-popup-frame', window.parent.document).position()
) に iOS が要素の位置を設定しているように見えることがわかりました。{top: -x, left: 0}
したがって、私の解決策は、その厄介な を取り-x
、符号を逆にしてから、jQuery を使用してそのtop
位置を iframe に戻すことでした。より良い解決策があればぜひ聞きたいのですが、さまざまなアプローチを試した後、それが唯一の解決策でした。
欠点: 500 ミリ秒のタイムアウトを設定する必要がありました (それよりも短い時間でも動作する可能性がありますが、安全を確保したかったためです) x
。その結果、経験は非常にぎくしゃくしています。. . しかし、少なくともそれは機能します
解決
var mobileInputReposition = function(){
//if statement is optional, I wanted to restrict this script to mobile devices where the problem arose
if(screen.width < 769){
setTimeout(function(){
var parentFrame = $('#subscribe-popup-frame',window.parent.document);
var parentFramePosFull = parentFrame.position();
var parentFramePosFlip = parentFramePosFull['top'] * -1;
parentFrame.css({'position' : 'fixed', 'top' : parentFramePosFlip + 'px'});
},500);
}
}
次にmobileInputReposition
、次のようなものを$('your-input-field).focus(function(){})
呼び出すだけです$('your-input-field).blur(function(){})