LINUX.ORG.RU

Клавиатурный ввод в iframe не работает

 , , , ,


0

1

Написал простенькую игрушку на Google PlayN. Всё классно работает локально.
Задеплоил на сервер — тоже всё хорошо. Теперь вставил в iframe — не работает клавиатура.
Нашёл воркэраунд: если нажать F5 и быстро-быстро, пока iframe не догрузился покликать по нему, то всё правильно работает.
Нужно как-то определять в коде рабочесть клавиатуры и, если она не работает, переинициализировать её.
В init такой код:

		Keyboard k = PlayN.keyboard();

		k.setListener(new Listener() {

			@Override
			public void onKeyUp(Event event) {
			}

			@Override
			public void onKeyDown(Event event) {
				/* long long code was here */
			}

			@Override
			public void onKeyTyped(TypedEvent event) {
			}
		});
Пока не представляю, как вообще определить, что данные с клавиатуры не читаются.
Ссылки: приложение vk, игра в iframe, игра без iframe (всегда работает).
Потестите и предложите, пожалуйста, как можно с такой бедой бороться.

★★★★★
Ответ на: комментарий от MrClon

Да web тут очень косвенно.

CYB3R ★★★★★
() автор топика

Потестил. Предполагаю остутствие фокуса у айфрейма во время инициализации клавы. Может сделать кнопку «плей» для нажатия мышью после чего уже с фокусом инициализировать клавиатуру.

varchar
()
Ответ на: комментарий от varchar

Думаю, что с мышью будет та же фигня (отсутствие фокуса), но всё же попробую.

CYB3R ★★★★★
() автор топика
Ответ на: комментарий от CYB3R
Chromium	34.0.1847.132 (Developer Build 265804) 
OS	Linux 
Blink	537.36 (@171891)
JavaScript	V8 3.24.35.33
Flash	13.0.0.206
User Agent	Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.132 Safari/537.36
Command Line	 chromium-browser --extra-plugin-dir=/usr/lib64/nsbrowser/plugins --ppapi-flash-path=/usr/lib64/chromium-browser/PepperFlash/libpepflashplayer.so --ppapi-flash-version=13.0.0.206 --ppapi-flash-path=/usr/lib64/chromium-browser/PepperFlash/libpepflashplayer.so --ppapi-flash-version=13.0.0.206 --proxy-server=127.0.0.1:8123 --flag-switches-begin --enable-accelerated-overflow-scroll --force-compositing-mode --enable-universal-accelerated-overflow-scroll --enable-threaded-compositing --flag-switches-end

Кривости возможно из-за видеодрайвера не дающего браузеру всяких gpu-ускоренных фич.

varchar
()
Ответ на: комментарий от CYB3R

Вот решение по захвату фокуса после первого клика на канвасе:

<canvas onclick="window.focus()" width="640" height="480"></canvas>
Так кийдауны идут айфрейму, иначе родительскому окну. Наверняка можно фокус и на onload захватывать или ещё когда, сам смотри.

Этот див у тебя лишний:

<div style="width: 640px; height: 480px"><div style="visibility: hidden; position: absolute; top: -500px; overflow: visible; white-space: nowrap;"></div></div>
, из-за него в хромиуме скроллбары.

Да, а сыграть-то не выходит, только что-то нажмешь - всё - геймовер, жёстко, дал бы хоть шанс :)

varchar
()
Ответ на: комментарий от varchar

Так кийдауны идут айфрейму, иначе родительскому окну.

А вот почему так - мне непонятно, клик сам по себе должен бы дать фокус...

varchar
()
Ответ на: комментарий от varchar

Этот див у тебя лишний

Странно, у меня этого дива нигде нет. Да и скроллбаров там быть не может, ибо overflow:hidden.

Да, а сыграть-то не выходит, только что-то нажмешь - всё - геймовер

Опять странно, УМВР. Chromium 31.

CYB3R ★★★★★
() автор топика
Ответ на: комментарий от varchar

Действительно странно, у меня нигде этого лишнего дива нет.

CYB3R ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.