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.
Étapes à reproduire
https://m.ebay.com/
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.
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);
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é.