Keyboard hides iOS input fields in PhoneGap Build 3.1 with an iFrame/object and JQTouch
Asked Answered
U

1

3

I'm developing an app that loads a form from another website into an iFrame. The iFrame is set to 100% width and height while displayed. That website has JQTouch.

When I touch an input field in iOS 7 on the iPhone, the keyboard pops up and covers the input fields. It doesn't scroll, resize, or even let me scroll down to see the input field. If I type and then close the keyboard, nothing happens.

I've tried everything I've come across. Adding/removing height=device-height in the meta viewport tag didn't do anything. The thing that came closest to a solution was adding the preference "KeyboardShrinksView = true" in config.xml. That made it scroll (but not enough), and permanently pushes the site up about 20px or so.

I've been working on this for the last couple days with no solution in sight. Is this a bug? Is it the way JQTouch is interacting with PhoneGap Build?

UPDATE: Still no fix, but to test I took the form's page out of the iframe and set it using window.location.href="www.mywebsite.com"; They keyboard works in that situation. This is not a valid solution for me (yet), but may provide info on why it's not working.

UPDATE 2: I'm restructuring the app to use window.location.href, rather than an iframe or html object. This creates some small issues, but these are better than the keyboard not working. If anyone has an answer, I'd still like to see it.

Unmuzzle answered 13/12, 2013 at 21:34 Comment(2)
I am having the same issue. Did you ever find a workaround?Dzungaria
I came up with a couple workarounds. I'll post them as an answer.Unmuzzle
U
5

Major Edit: I just realized the InAppBrowser plugin does NOT fix the keyboard bug alone. I did some more research, and this topic helped. I had to add "height=device-height" to every meta viewport tag. "width=device-width" should fix any problems viewing the site in mobile Safari. The final result is this:

<meta name="viewport" content="initial-scale=1, minimum-scale=1, 
    maximum-scale=1, user-scalable=0, height=device-height, width=device-width"/>

One of these also had a semicolon thrown in there, so be sure to check and double-check for syntax errors, as they may cause the problem.

If this doesn't work, there is another solution that you might try in place of or in addition to the meta viewport fix. It's several comments down in that topic I linked and involves some changes to the CSS. Changes to this didn't fix anything in my code, but it helped at least one person, so it's worth checking out if you still need a solution.

I tested this fix with iframe and object, and it didn't work--InAppBrowser is still necessary.

/Major Edit.

Here are some workarounds that worked for me:

  1. Use the InAppBrowser plugin. This allows the app to interact with loadstart/loadstop/loaderror events in the loaded page within the InAppBrowser. This is the solution I suggest. However, with iOS 7, you will need to hide the status bar manually, the solution for which is here

  2. OR Load the page using window.location.href = [website url]. If you don't need to worry about interacting with or returning to the app or linking to external sites (both of which I needed), this is the way to go. It's pretty simple, but lacks some of the functionality of the first solution.

  3. OR Get rid of JQTouch. I wasn't able to do this, but much of it is redundant when you're building an app with PhoneGap.

Unmuzzle answered 13/2, 2014 at 15:53 Comment(2)
#win "height=device-height" did it for me! I am not 100% sure how this will impact all aspects of page's rendering, but it fixed what I was looking for! Thanks so much @daniel-millerDzungaria
@Dzungaria - I actually ran into problems opening the site in Safari until I added device=device-width. I'll put that in the answer now for anyone else that needs it, but after I added that, it looks to be fixed.Unmuzzle

© 2022 - 2024 — McMap. All rights reserved.