web-dev-qa-db-fra.com

Le bouton d'envoi du formulaire ne fonctionne pas sur WebView

Lors du chargement de certains sites Web dans une WebView, je ne suis pas en mesure de soumettre leurs formulaires. Lorsque vous cliquez sur l'entrée de soumission (bouton), elle se concentre, mais rien d'autre ne se produit.

Ces mêmes sites fonctionnent sur Chrome (dans le même appareil).

Comment puis-je résoudre ce problème? Y a-t-il un paramètre qui me manque?

Les commentaires sur les raisons de ce problème seront également appréciés.


Exemple

Étapes à reproduire

  1. Charger BrowseActivity , qui chargera https://m.ebay.com/
  2. Une fois la page chargée, saisissez une requête de recherche (par exemple, "Ordinateur portable")
  3. Appuyez sur le bouton de recherche bleu du formulaire ou sur le bouton d'action du clavier logiciel (icône de la loupe)

Comportement attendu : Le formulaire de recherche doit être soumis et les résultats de la recherche affichés

Comportement réel : le bouton de recherche bleu obtient le focus (représenté par une bordure lumineuse), mais rien d'autre ne se produit.


BrowseActivity.Java

public class BrowseActivity extends AppCompatActivity {

    WebView mWebView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_browse);

        mWebView = (WebView) findViewById(R.id.home_wv_content);
        mWebView.setWebViewClient(new WebViewClient());
        mWebView.setWebChromeClient(new WebChromeClient());
        mWebView.getSettings().setJavaScriptEnabled(true);

        // Ebay has a blue search button where this issue can be replicated
        mWebView.loadUrl("https://m.ebay.com");
    }
}

activity_browse.xml

<?xml version="1.0" encoding="utf-8"?>
<Android.support.constraint.ConstraintLayout
    xmlns:Android="http://schemas.Android.com/apk/res/Android"
    xmlns:app="http://schemas.Android.com/apk/res-auto"
    xmlns:tools="http://schemas.Android.com/tools"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    tools:context="my.example.BrowseActivity">

    <WebView
        Android:id="@+id/home_wv_content"
        Android:layout_width="match_parent"
        Android:layout_height="match_parent"/>

</Android.support.constraint.ConstraintLayout>

Modifier:

J'ai envisagé d'utiliser une interface personnalisée interface JavaScript afin d'attraper le clic sur le bouton, de lire la requête d'entrée et de rediriger vers la page de recherche.

Quoi qu'il en soit, cette approche est étroitement liée au site Web lui-même (par exemple, ebay) et j'aimerais que cela fonctionne avec différents sites. De plus, je ne veux pas que les modifications apportées au site Web interrompent mon application.

19
Sam

Vous devrez peut-être activer d'autres éléments dans la vue Web pour avoir l'équivalent complet d'un navigateur. Il y a d'autres choses qui sont désactivées par défaut dans la vue Web en plus de javascript).

Essayez ce paramètre (basé sur mon projet où nous avons eu quelques problèmes avec webview):

mWebView.getSettings().setJavaScriptEnabled(true);
mWebView.getSettings().setDomStorageEnabled(true);
mWebView.getSettings().setDatabaseEnabled(true);
mWebView.getSettings().setDatabasePath(dbpath); //check the documentation for info about dbpath
mWebView.getSettings().setMinimumFontSize(1);
mWebView.getSettings().setMinimumLogicalFontSize(1);
6
Josef Adamcik

J'ai eu des problèmes similaires, un en particulier consiste à télécharger un fichier.

Commentaires sur la raison de ce problème: -

Le problème est qu'il existe différentes versions de système d'exploitation et différentes versions de moteur Web. Étant donné que je suppose que la vue Web présente une page HTML5 et qu'elle ne fonctionne pas bien sur cet appareil donné, vous auriez probablement besoin de plus que JS activé.

Certaines pages Web gardent une trace du nombre de soumissions et elles ont besoin d'accéder au stockage client/Web.

WebSettings mWebSettings = mWebView.getSettings();
mWebSettings.setJavaScriptEnabled(true); // Done above
mWebSettings.setDomStorageEnabled(true); // Try
mWebSettings.setSupportZoom(false);
mWebSettings.setAllowFileAccess(true);
mWebSettings.setAllowContentAccess(true);

Je ne peux pas aider beaucoup sans connaître au moins la version du système d'exploitation Android Android qui pointera vers la version du moteur Web utilisée.

À votre santé.

1
Al-Kathiri Khalid