Как обнаружить заполнение формы Google в веб-просмотре - PullRequest
0 голосов
/ 24 февраля 2020

Я загружаю форму Google в веб-просмотр и мне нужно знать, когда пользователь заполнил форму. Форма может иметь один или несколько разделов (страниц).

Что я пробовал

Анализ URL-адреса для информации, уникальной для события отправки формы:
URL заканчивается https://.../viewform на первой странице формы
URL заканчивается https://.../formResponse на странице отправки формы с благодарностью, но также начинается вторая страница и каждая страница после этого (и при возврате страницы ).
Таким образом, этот метод работает только для одностраничных форм.

1 Ответ

1 голос
/ 24 февраля 2020

Страница Google "Спасибо" имеет уникальный div .freebirdFormviewerViewResponseConfirmContentContainer.
Путем добавления javascript в веб-просмотр при загрузке страницы, мы можем обнаружить наличие этого div и вызвать метод из нашего JavascriptInterface для уведомления собственного кода о том, что форма была отправлена:

Примечание: это работает только в том случае, если форма Google загружается непосредственно в веб-просмотр. Это не работает, если форма Google встроена в веб-сайт с помощью iframe (я обнаружил, что невозможно обнаружить это событие отправки в этом случае).

(Java код в качестве примера)

@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState)
{
    ...
    mWebView.setWebViewClient(new WebViewClient()
        {
            @Override
            public void onPageFinished(WebView view, String url)
            {
                String js =
                    "( " +
                    "function() { " +
                    "if(document.getElementsByClassName('freebirdFormviewerViewResponseConfirmContentContainer').length > 0) {" +
                    WEBVIEW_INTERFACE_NAME + ".googleFormSubmitted();" +
                    "}" +
                    "}) " +
                    "()";

            if(android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.KITKAT)
                mWebView.evaluateJavascript(js, null);
            else
                mWebView.loadUrl("javascript:" + js);
            }
        }
    );

    if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1)
        mWebView.addJavascriptInterface(new WebViewInterface(getContext()), WEBVIEW_INTERFACE_NAME);
    }
}

private class WebViewInterface
{
        Context mContext;

        WebViewInterface(Context context)
        {
            mContext = context;
        }

        @JavascriptInterface
        public void googleFormSubmitted()
        {
            // Do what you need
        }
}
...