iOS9-같은 문제.
TLDR-문제의 원인. 해결책을 보려면 아래로 스크롤하십시오.
나는 형태가 있었다 position:fixed
id = 'subscribe-popup-frame'인 iframe에
원래 질문에 따라 입력 초점에서 iframe은 화면 상단이 아닌 문서 상단으로 이동합니다.
사용자 에이전트가 idevice로 설정된 사파리 개발 모드에서도 동일한 문제가 발생하지 않았습니다. 따라서 iOS 가상 키보드가 팝업되면 문제가 발생한 것 같습니다.
iframe의 위치를 기록하는 콘솔 (예 :)을 통해 발생하는 상황에 대한 가시성을 얻었 $('#subscribe-popup-frame', window.parent.document).position()
으며 거기에서 iOS가 요소의 위치를{top: -x, left: 0}
가 가상 키보드가 팝업 될 때 (예 : 입력 요소에 초점을 맞춘) .
그래서 내 솔루션은 그 성가신을 가져 와서 -x
부호 를 뒤집은 다음 jQuery를 사용하여top
위치를 iframe에 다시 었습니다. 더 나은 해결책이 있다면 나는 그것을 듣고 싶지만 12 가지 다른 접근법을 시도한 후에 그것은 나를 위해 일한 유일한 방법이었습니다.
단점 :x
iOS가 요소의 위치로 장난을 치른 후 최종 값을 캡처했는지 확인하기 위해 500ms의 시간 초과를 설정해야했습니다 (작동하지 않을 수도 있지만 안전하고 싶었습니다) . 결과적으로 경험이 매우 불안정합니다. . . 하지만 적어도 작동합니다
해결책
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(){})