Приложение холста Unity webgl Facebook теряет фокус при использовании диалогового окна входа

Мое приложение iframe на Facebook (созданное с помощью Unity webgl) теряет фокус после вызова диалогового окна входа в Facebook (FB.LogInWithReadPermissions) или любое другое взаимодействие с Facebook, которое вызывает диалоговое окно (FB.AppRequest и т. д.).

Фокус не возвращается приложению, поэтому нужно щелкнуть в любом месте iframe, чтобы увидеть результаты, что не очень удобно.

Любое обходное решение?

Редактировать:

Быстрое и грязное решение, но оно работает:

setInterval (
    function () {
        if (!document.hasFocus()) {
            window.focus();
        }
    },
    1000
);

На самом деле document.hasFocus() проверка здесь не нужна.

Я не думаю, что есть способ узнать, когда закрывается диалоговое окно Facebook при использовании Facebok Unity SDK, поскольку обратный вызов выполняется в приложении WebGL, которое потеряло фокус, поэтому он не работает, пока не получит фокус.

Может быть, лучше использовать Facebook Javascript SDK для игр Unity WebGL на Facebook?


person user3383180    schedule 09.12.2015    source источник
comment
спасибо, ваше решение было действительно полезным   -  person BlackCat    schedule 03.06.2019


Ответы (2)


У меня была аналогичная проблема довольно давно. Я решил это, добавив одну функцию прослушивания в index.html. Он будет слушать, если iframe потеряет фокус и резко сбросит фокус на нем. Посмотрите на событие onblur.

person Nika Kasradze    schedule 10.12.2015
comment
Спасибо, придумал временное решение, используя document.hasFocus, отредактировал вопрос. - person user3383180; 10.12.2015
comment
Также, когда я закрываю диалоговое окно Facebook, onblur у меня почему-то не работает. - person user3383180; 10.12.2015

У меня сработало 4 на Unity 5.2, используя это: на С# при обратном вызове facebook:

 Application.ExternalCall("recuperaFocus");

и на html, обслуживающем холст facebook, следующий js:

 function recuperaFocus(){
      this.focus();      
 }
person Ares Sancho    schedule 12.04.2016